Problem Solving/Baekjoon

[백준] 1263 시간 관리 - Greedy / Java

graycode 2023. 4. 15. 13:04

 문제 링크

 

1263번: 시간 관리

진영이는 캠프 조교를 온 후 효율적으로 시간 관리를 해야 한다는 것을 깨달았다. 진영이는 하루에 해야 할 일이 총 N개가 있고 이 일들을 편하게 1번부터 N번까지 차례대로 번호를 붙였다. 진영

www.acmicpc.net

 

 풀이 과정

소요시간 t 와 마감시간 s 를 입력받아 s 를 기준으로 내림차순 정렬하고,

최대 마감시간에서 각각의 소요시간을 빼되, 각 업무의 마감 시간을 고려하여 time 을 갱신한다.

 

위를 수행한 후 time 이 0보다 작으면 -1 을, 아니라면 해당 값을 출력한다.

 

 풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
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));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;

        int n = Integer.parseInt(br.readLine());

        Pair[] arr = new Pair[n];
        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            arr[i] = new Pair(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
        }

        Arrays.sort(arr);

        int time = arr[0].s;
        for (int i = 0; i < n; i++)
            time = Math.min(time, arr[i].s) - arr[i].t;

        bw.write(String.valueOf(Math.max(time, -1)));
        bw.flush();
    }

    private static class Pair implements Comparable<Pair> {
        int t, s;

        public Pair(int t, int s) {
            this.t = t;
            this.s = s;
        }

        @Override
        public int compareTo(Pair o) {
            return o.s != this.s ? o.s - this.s : o.t - this.t;
        }
    }

}