https://www.acmicpc.net/problem/1931
1.
문제를 처음 보았을 때 저번에 프로그래머스에서 풀었던 단속 카메라 문제와 유사하다고 생각했다.
그러나 해당 문제의 풀이법을 잊었을 뿐 더러, 그 문제를 다시 풀어보았지만 이 문제에 적용시키기에 어려움을 느꼈다.
2.
이 문제를 풀기에는 다음과 같이 세 가지의 탐욕적 사고 방법이 있다.
- 
회의 시작 시간을 기준으로 
- 
회의 종료 시간을 기준으로 
- 
회의 소요 시간을 기준으로 
이 세가지 방법 중 첫 번째와 세 번째 방법은 반례가 존재하므로, 두 번째 방법을 선택한다.
회의가 빨리 종료되는 순으로 오름차순 정렬을 하여 선택을 하는데, 다음 선택할 회의의 시작 시간이 그 전 회의의 종료 시간보다 빠르면 선택하지 않는다.
3.
import java.util.Arrays;
import java.util.Scanner;
import java.util.Comparator;
public class Main {
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[][] meetings = new int[n][2];
        for (int i = 0; i < n; i++) {
            meetings[i][0] = sc.nextInt();
            meetings[i][1] = sc.nextInt();
        }
        Arrays.sort(meetings, new Comparator<int[]>() {
            @Override
            public int compare(int[] a, int[] b) {
                if (a[1] == b[1]) {
                    return a[0] - b[1];
                }
                return a[1] - b[1];
            }
        });
        int answer = 0;
        int end = -1;
        for (int i = 0; i < n; i++) {
            if (meetings[i][0] >= end) {
                end = meetings[i][1];
                answer++;
            }
        }
        System.out.println(answer);
        sc.close();
    }
}
4.
정렬할 때 종료 시간이 같다면, 시작 시간이 빠른 순으로 정렬을 한다.
'Algorithm' 카테고리의 다른 글
| [Java] 백준 14502 : 연구소 (0) | 2020.08.07 | 
|---|---|
| [Java] 백준 11724 : 연결 요소의 개수 (0) | 2020.08.07 | 
| [Java] 백준 1012 : 유기농 배추 (0) | 2020.08.07 | 
| [Java] 백준 11057 : 오르막 수 (0) | 2020.08.06 | 
| [Java] 백준 9465 : 스티커 (0) | 2020.08.06 |