Algorithm/백준
[백준] 14469 소가 길을 건너간 이유 3
SSONGMI
2021. 5. 19. 21:37
반응형
문제 출처: https://www.acmicpc.net/problem/14469
14469번: 소가 길을 건너간 이유 3
첫 번째 소는 2초에 도착하고 3초에 농장을 입장한다. 그 다음에는 세 번째 소가 5초에 도착하여 12초에 농장을 입장한다. 마지막으로 두 번째 소가 8초에 오는데, 세 번째 소가 검문을 받고 있으
www.acmicpc.net
1. 입력
: 첫 줄에 100 이하의 양의 정수 N이 주어진다.
: 다음 N줄에는 한 줄에 하나씩 소의 도착 시각과 검문 시간이 주어진다.
: 각각 1,000,000 이하의 양의 정수이다.
2. 출력
: 모든 소가 농장에 입장하는 데 걸리는 최소 시간을 출력한다.
3. 풀이
: 우선 빨리 도착한 소부터 들어갈 수 있도록 해야하고, 만약 동시에 들어온다면 검문시간이 짧은 소부터 지나가야 한다.
: 소의 도착 시간과 검문 소요 시간을 저장할 수 있는 클래스를 만들고 도착 시간과 소요시간을 기준으로 정렬할 수 있도록 Comparable을 구현한다.
: 입력을 저장하고 정렬시킨다.
: 정렬된 소들을 순회하면서 현재 시간이 도착 시간보다 작으면 소가 도착하고나서 검문이 가능하므로 현재시간을 검문시간으로 만들고 소요시간을 더해준다.
: 만약 현재시간이 도착 시간보다 늦다면 그냥 검문 소요 시간을 더해준다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringBuilder sb = new StringBuilder();
static StringTokenizer st;
static class Cow implements Comparable<Cow>{
int start, time;
public Cow(int start, int time) {
super();
this.start = start;
this.time = time;
}
@Override
public int compareTo(Cow o) {
if(this.start != o.start) return this.start-o.start;
return this.time - o.time;
}
}
public static void main(String[] args) throws NumberFormatException, IOException {
int N = Integer.parseInt(br.readLine());
Cow[] c = new Cow[N];
for(int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int time = Integer.parseInt(st.nextToken());
c[i] = new Cow(start, time);
}
Arrays.sort(c);
int cnt = 0;
for(int i = 0; i < N; i++) {
Cow cur = c[i];
if(cur.start > cnt) cnt = cur.start + cur.time;
else cnt += cur.time;
}
System.out.println(cnt);
}
}
반응형