라이브러리는 도서관 아닌가요

백준 6068 시간 관리하기 java greedy 본문

알고리즘 문제

백준 6068 시간 관리하기 java greedy

veryhi 2022. 9. 8. 22:58

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

 

6068번: 시간 관리하기

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

www.acmicpc.net

 

예전에 풀었던, 내일 할거야와 같은 종류의 문제

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

 

7983번: 내일 할거야

내일(1일)부터 연속으로 최대 며칠 동안 놀 수 있는지를 출력한다. 가령, 답이 0이면, 내일 과제를 해야 하며, 1 이면, 모레에 과제를 해야 한다.

www.acmicpc.net

 

 

 

바뀐 것은 불가능한 시간대가 존재하기 때문에, -1로 체크해줘야 한다는 점이다.

 

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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));
        int n = Integer.parseInt(br.readLine());
        StringTokenizer st;
        int[][] time = new int[n][2];
        for(int i=0; i<n; ++i){
            st=new StringTokenizer(br.readLine());
            time[i][0] = Integer.parseInt(st.nextToken()); // 걸리는 시간
            time[i][1] = Integer.parseInt(st.nextToken()); // 마감 시간
        }

        Arrays.sort(time, (e1, e2) -> {
            if(e1[1] == e2[1]) return e1[0] - e2[0];
            else return e1[1] - e2[1];
        });

        int nMinus1 = n-1;
        int lastIdx = time[nMinus1][1]; // 가장 마지막 마감 시간 저장
        for(int i=nMinus1; -1<i; --i){
            if(time[i][1] <= lastIdx){
                lastIdx = time[i][1] - time[i][0];
            }
            else {
                lastIdx -= time[i][0];
            }
        }

        if(lastIdx < 0){
            lastIdx = -1;
        }
        System.out.println(lastIdx);

    }
}
Comments