[알고리즘] 1931. 회의실 배정

2024. 2. 18. 16:22Algorithm/with Java

0. 문제

 

 

1931번: 회의실 배정

(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.

www.acmicpc.net

 


1. 문제 이해

 

  1. 그리디 알고리즘 - Activity-Selection Problem

 


2. 제출

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;

public class BOJ1931 {

    private static class Meeting implements Comparable<Meeting> {
        int start, end;

        Meeting (int start, int end){
            this.start = start;
            this.end = end;
        }

        @Override
        public int compareTo(Meeting o) {
            return this.end == o.end ? Integer.compare(this.start, o.start) : Integer.compare(this.end, o.end);    
        }
    }

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        Meeting[] meetings = new Meeting[N];

        for(int i=0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            int start = Integer.parseInt(st.nextToken());
            int end = Integer.parseInt(st.nextToken());
            meetings[i] = new Meeting(start, end);
        }

        Arrays.sort(meetings);

        List<Meeting> list = new ArrayList<>();
        list.add(meetings[0]);
        for(int i=1; i<N; i++) {
            if(meetings[i].start >= list.get(list.size()-1).end) {
                list.add(meetings[i]);
            }
        }

        System.out.println(list.size());
        br.close();
    }

}
  • 최대한 많은 회의를 소화하기 위해서는 매 순간 가장 빨리 끝나는 회의를 선택하면 된다.
  • return this.end == o.end ? Integer.compare(this.start, o.start) : Integer.compare(this.end, o.end);
    : end를 기준으로 오름차순으로 정렬한다.
  • if(meetings[i].start >= list.get(list.size()-1).end) {
    : 회의 시간이 겹치지 않아야 한다.

 


'Algorithm > with Java' 카테고리의 다른 글

[알고리즘] 1183. 동전 자판기 (하)  (0) 2024.02.19
[알고리즘] 1828. 냉장고  (0) 2024.02.19
[Java] Greedy algorithm  (0) 2024.02.18
[알고리즘] 풀었던 문제 (240208)  (0) 2024.02.18
[알고리즘] 4012. 요리사  (0) 2024.02.18