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);
}
}
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 14863: 서울에서 경산까지 - JAVA (1) | 2024.06.10 |
---|---|
[백준] 11058: 크리보드 - JAVA (1) | 2024.06.10 |
[백준] 23747: 와드 - JAVA (0) | 2024.06.10 |
[백준] 17953: 디저트 - JAVA (0) | 2024.05.30 |
[백준] 16472: 고냥이 - JAVA (0) | 2024.05.29 |
[백준] 16194: 카드 구매하기 2 - JAVA (0) | 2024.05.23 |