본문 바로가기

PS/Problems

[Java] 백준 1931번 - 그리디 알고리즘

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

public class s2_1931 {
    public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        int[][] time = new int[N][2];
        for (int i = 0; i < N; i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            time[i][0] = Integer.parseInt(st.nextToken());
            time[i][1] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(time, (o1, o2) -> { 
            if(o1[0] == o2[0]){ 
                return Integer.compare(o1[1],o2[1]);
            }
            else{ 
                return Integer.compare(o1[0],o2[0]); 
            } 
        });
        // 회의 시작 시간 순서대로 이중 배열을 정렬
        // 시작이 같으면 끝나는 시간으로 정렬 -> (1,5),(1,1) 순서면 카운트 안되기 때문

        int cnt = 0;
        int end = -1;

        for (int i = 0; i < N; i++){
            if (end == -1){
                end = time[i][1];
            }
            else if (end <= time[i][0]){
                cnt++;
                end = -1;
                i--;
            }
            else{
                end = Math.min(end, time[i][1]);
            }
        }
        // 회의가 최대한 일찍 끝나는 시간(end)에 대한 그리디 알고리즘
        // 시작 시간, 끝나는 시간 모두 end보다 적으면 end를 변경
        if (end != -1) cnt++;
        System.out.println(cnt);
    }
}

 

'PS > Problems' 카테고리의 다른 글

[Java] 백준 9095번 - Dynamic Programming  (0) 2021.12.28
[Java] (시간 17등) 백준 7576번  (0) 2021.12.27
[Java] 백준 2630번 - DFS  (0) 2021.12.26
[Java] 백준 2606번 - BFS  (0) 2021.12.26
[Java] (시간 1등) 백준 1620번 - HashMap  (0) 2021.12.25