본문 바로가기
알고리즘/백준

[BOJ 백준] 6068 - 시간 관리하기, Java(자바)

by eungineer 2023. 3. 3.

문제

https://www.acmicpc.net/problem/6068

 

6068번: 시간 관리하기

성실한 농부 존은 시간을 효율적으로 관리해야 한다는 걸 깨달았다. 그는 N개의 해야할 일에 (1<=N<=1000) 숫자를 매겼다. (우유를 짜고, 마굿간을 치우고, 담장을 고치는 등의) 존의 시간을 효율적

www.acmicpc.net

풀이

가장 늦게 끝나도 되는 일 순서로 배열을 정렬하고, 그리디를 이용해 현재 시간을 끝에서부터 줄여나갔다. 끝나는 시간이 현재 시간보다 더 작다면 현재 시간을 끝나는 시간으로 조정해줘야 한다.

코드

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String args[]) throws Exception {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(in.readLine());
        int[][] arr = new int[N][2];
        for (int i = 0; i < N; i++) {
            StringTokenizer st = new StringTokenizer(in.readLine());
            arr[i][0] = Integer.parseInt(st.nextToken());
            arr[i][1] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(arr, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return o2[1] - o1[1];
            }
        });
        int cur = arr[0][1];
        for (int i = 0; i < N; i++) {
            if (arr[i][1] < cur)
                cur = arr[i][1];
            cur -= arr[i][0];
            if (cur < 0)
                break;
        }
        System.out.println(cur < 0 ? -1 : cur);
    }
}