[BOJ]11000 - 강의실 배정(G5)

suhyun·2023년 1월 3일
0

백준/프로그래머스

목록 보기
54/81

문제 링크

11000-강의실 배정


입력

첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000)
이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si < Ti ≤ 109)

출력

강의실의 개수를 출력하라.


문제 풀이

이건 되게 간단한 문제였는데
객체 비교하는 표현이 간단한 방법을 발견해서 기록용이다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

class Class {
    int start, end;

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

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

        int N = Integer.parseInt(st.nextToken());
        classes = new Class[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());
            classes[i] = new Class(start, end);
        }

        Arrays.sort(classes, (o1, o2) -> o1.start == o2.start ? o1.end - o2.end : o1.start - o2.start);

        PriorityQueue<Integer> pq = new PriorityQueue<>();
        pq.offer(classes[0].end);

        for (int i = 1; i < N; i++) {
            if (pq.peek() <= classes[i].start) {
                pq.poll();
            }
            pq.offer(classes[i].end);
        }

        System.out.println(pq.size());
    }


}

1. Comparable

- 자기 자신과 매개변수 객체를 비교한다.
- compareTo

static class Class implements Comparable<Lecture> {

		int start, end;

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

		@Override
		public int compareTo(Lecture o) {

			if (start == o.start)
				return end - o.end;

			return start - o.start;
		}
}

2. Comparator

- 두 매개변수 객체를 비교한다.
- compare

Arrays.sort(arr, new Comparator<int[]>() {
			public int compare(Class o1, Class o2) {
               if(o1.start == o2.start) return o1.end - o2.end;
               return o1.start - o2.start;
			}
		});
       

내가 이번에 사용한 방식으로 Arrays.sort() 의 매개변수로 compare 함수를 넘겨준다.
이번에는 compare 함수를 따로 만들지 않고,
Arrays.sort() 안에서 바로 compare 함수를 구현하는 식으로 구현했다.

Arrays.sort(classes, (o1, o2) -> o1.start == o2.start ? o1.end - o2.end : o1.start - o2.start);
profile
꾸준히 하려고 노력하는 편 💻

0개의 댓글