알고리즘 문제
백준 6068 시간 관리하기 java greedy
veryhi
2022. 9. 8. 22:58
https://www.acmicpc.net/problem/6068
6068번: 시간 관리하기
성실한 농부 존은 시간을 효율적으로 관리해야 한다는 걸 깨달았다. 그는 N개의 해야할 일에 (1<=N<=1000) 숫자를 매겼다. (우유를 짜고, 마굿간을 치우고, 담장을 고치는 등의) 존의 시간을 효율적
www.acmicpc.net
예전에 풀었던, 내일 할거야와 같은 종류의 문제
https://www.acmicpc.net/problem/7983
7983번: 내일 할거야
내일(1일)부터 연속으로 최대 며칠 동안 놀 수 있는지를 출력한다. 가령, 답이 0이면, 내일 과제를 해야 하며, 1 이면, 모레에 과제를 해야 한다.
www.acmicpc.net
바뀐 것은 불가능한 시간대가 존재하기 때문에, -1로 체크해줘야 한다는 점이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringTokenizer st;
int[][] time = new int[n][2];
for(int i=0; i<n; ++i){
st=new StringTokenizer(br.readLine());
time[i][0] = Integer.parseInt(st.nextToken()); // 걸리는 시간
time[i][1] = Integer.parseInt(st.nextToken()); // 마감 시간
}
Arrays.sort(time, (e1, e2) -> {
if(e1[1] == e2[1]) return e1[0] - e2[0];
else return e1[1] - e2[1];
});
int nMinus1 = n-1;
int lastIdx = time[nMinus1][1]; // 가장 마지막 마감 시간 저장
for(int i=nMinus1; -1<i; --i){
if(time[i][1] <= lastIdx){
lastIdx = time[i][1] - time[i][0];
}
else {
lastIdx -= time[i][0];
}
}
if(lastIdx < 0){
lastIdx = -1;
}
System.out.println(lastIdx);
}
}