반응형

문제

한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의들에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 최대수의 회의를 찾아라. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다.

입력

첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회의의 정보가 주어지는데 이것은 공백을 사이에 두고 회의의 시작시간과 끝나는 시간이 주어진다. 시작 시간과 끝나는 시간은 231-1보다 작거나 같은 자연수 또는 0이다.

출력

첫째 줄에 최대 사용할 수 있는 회의 수를 출력하여라.

Java Solution

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

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));

        int n = Integer.parseInt(br.readLine());
        Conference[] confs = new Conference[n];
        for(int i = 0; i < n; i++) {
            StringTokenizer tokenizer = new StringTokenizer(br.readLine());
            int start = Integer.parseInt(tokenizer.nextToken());
            int end = Integer.parseInt(tokenizer.nextToken());
            confs[i] = new Conference(start, end);
        }
        Arrays.parallelSort(confs);
        int lastTime = -1;
        int cnt = 0;
        for(int i = 0; i < n; i++) {
            if(lastTime <= confs[i].start) {
                lastTime = confs[i].end;
                cnt++;
            }
        }
        
        bw.write(String.valueOf(cnt));
        br.close();
        bw.close();
    }
    
    private static class Conference implements Comparable<Conference> {
        int start;
        int end;
        
        Conference(int start, int end) {
            this.start = start;
            this.end = end;
        }
        
        @Override
        public int compareTo(Conference o) {
            int comp = Integer.compare(end, o.end);
            return comp != 0 ? comp : Integer.compare(start, o.start);
        }
    }
}

 

Comparable 인터페이스를 구현하여서 1순위로 끝나는 시간을 기준으로, 만약 끝나는 시간이 같다면 시작 시간을 기준으로 오름차순 정렬을 한 후에, 시작 시간이 가장 최근에 끝난 회의 시간 이상일 경우 카운트를 세는 방식으로 풀었습니다.

반응형

'Algorithm' 카테고리의 다른 글

[프로그래머스] 이중우선순위 큐 - Java, Kotlin  (0) 2019.09.26
[백준 1037번] 약수 - Java  (0) 2019.09.23
[백준 2217번] 로프 - Java  (0) 2019.09.21
[백준 11399번] ATM - Java  (0) 2019.09.21
[백준 11047번] 동전 0 - Java  (0) 2019.09.20
반응형