
문제 분석
2차배열 정렬을 먼저 하고 진행했다. 진행되는 시간들의 합이 각 순간의 조건을 넘어가면 중단시키기 위해서다.
매순간 조건과의 차이가 가장 적은것이 결과값이 된다.
전체 소스
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
int repeat = Integer.parseInt(st.nextToken());
int[][] array = new int[repeat][2];
for(int i=0; i<repeat; i++) {
st = new StringTokenizer(br.readLine()," ");
array[i][0] = Integer.parseInt(st.nextToken());
array[i][1] = Integer.parseInt(st.nextToken());
}
Arrays.sort(array,(o1,o2)->{
if(o1[1]==o2[1]) {
return Integer.compare(o1[0], o2[0]);
}else {
return Integer.compare(o1[1], o2[1]);
}
});
int result = 999999999;
int time = 0;
boolean check = true;
for(int i=0; i<repeat; i++) {
time += array[i][0];
if(time>array[i][1]) {
result=-1;
check = false;
break;
}else {
if(result>array[i][1]-time) {
result = array[i][1]-time;
}
}
}
if(result>array[repeat-1][1]-time) {
result = array[repeat-1][1]-time;
}
System.out.println(result);
}
}
문제
성실한 농부 존은 시간을 효율적으로 관리해야 한다는 걸 깨달았다. 그는 N개의 해야할 일에 (1<=N<=1000) 숫자를 매겼다. (우유를 짜고, 마굿간을 치우고, 담장을 고치는 등의)
존의 시간을 효율적으로 관리하기 위해, 그는 끝내야만 하는 일 목록을 만들었다. 완성될 때 필요한 시간을 T_i(1<=T_i<=1,000) 라고 하며, 끝내야하는 시간을 S_i(1<=S_i<=1,000,000) 이라 한다. 농부 존은 하루의 시작을 t = 0으로 정했다. 그리고 일 할 때는 그 일을 마칠 때 까지 그 일만 한다.
존은 늦잠 자는 걸 좋아한다. 따라서 제 시간에 끝낼 수 있게 결정할 수 있는 한도에서 존이 가장 늦게 일어나도 되는 시간을 출력하라.
입력
첫 줄에는 일의 개수인 N을 받고
두 번째 줄부터 N+1줄까지 T_i와 S_i를 입력받는다.
출력
존이 일을 할 수 있는 마지막 시간을 출력 하라. 존이 제시간에 일을 끝낼 수 없다면 -1 을 출력하라.
예제 입력 1 복사
4
3 5
8 14
5 20
1 16
예제 출력 1 복사
2
'알고리즘(BOJ) > Gold' 카테고리의 다른 글
백준 - Passport Control 16288 (0) | 2023.03.03 |
---|---|
백준 - 토너먼트 만들기 2262 (0) | 2023.03.02 |
백준 - 행복 유치원 13164 (0) | 2023.02.28 |
백준 - 과제 13904 (0) | 2023.02.21 |
백준 - 크게 만들기 2812 (0) | 2023.02.12 |