Algorithm/Baekjoon
[백준] 1263: 시간 관리 - JAVA
Baspo8
2024. 5. 31. 15:03
https://www.acmicpc.net/problem/1263
풀이
해야 할 일들 n개가 일을 처리하는데 걸리는 시간(s), 마감시간(t)이 주어진다.
이차원배열에 s와 t를 넣고 정렬하는데, 이때 정렬기준은 마감시간을 내림차순으로 정렬했다.
마감시간이 마지막인 것 부터 걸리는 시간을 빼주면 일을 언제 시작해야 하는지 구할 수 있다.
일을 시작해야할 시간을 갱신하면서 이 시간이 바라보고있는 일의 마감시간보다 작다면 하던대로 빼주고,
크다면 시작해야 할 시간을 현재 마감시간에서 걸리는 시간을 빼준 값으로 갱신한다.
메모리: 14576KB
시간: 148ms
언어: Java 11
import java.io.*;
import java.util.*;
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());
int[][] table = new int[n][2];
StringTokenizer st;
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
int t = Integer.parseInt(st.nextToken());
int s = Integer.parseInt(st.nextToken());
table[i][0] = t;
table[i][1] = s;
}
Arrays.sort(table, (o1, o2) -> o2[1] - o1[1]);
int answer = table[0][1] - table[0][0];
for (int i = 1; i < n; i++) {
if (answer <= table[i][1]) {
answer -= table[i][0];
} else {
answer = table[i][1] - table[i][0];
}
if (answer < 0) {
break;
}
}
System.out.println(answer < 0 ? -1 : answer);
}
}