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);
    }
}