[백준] 11000 강의실 배정 (골드4)

AI·2025년 9월 30일

https://www.acmicpc.net/problem/11000
arraylist로 하려고 했지만 너무 복잡해서
=> 우선순위 큐로 변경

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

public class Main {
    static int n;
    static int[][] c;
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        n = Integer.parseInt(br.readLine());
        c = new int[n][2];
        for(int i=0;i<n;i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            c[i][0] = Integer.parseInt(st.nextToken());
            c[i][1] = Integer.parseInt(st.nextToken());
        }
        // 정렬 -> arraylist에 넣고 존재하는 값이면 값 바꾸고 없으면 값 추가하기
        Arrays.sort(c, (a,b)->a[1]==b[1]? Integer.compare(b[0],a[0]):Integer.compare(b[1],a[1]));

        PriorityQueue<Integer> room = new PriorityQueue<>();
        room.add(c[n-1][0]);
        for(int i=n-2;i>=0;i--){
            if(c[i][1]<=room.peek()){
                room.poll();
                room.add(c[i][1]);
            } else{
                room.add(c[i][0]);
            }
        }
        System.out.println(room.size());
    }
}

=>
뒤에서 부터가 아니라 앞에서 부터로 변경

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

public class Main {
    static int n;
    static int[][] c;
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        n = Integer.parseInt(br.readLine());
        c = new int[n][2];
        for(int i=0;i<n;i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            c[i][0] = Integer.parseInt(st.nextToken());
            c[i][1] = Integer.parseInt(st.nextToken());
        }
        // 정렬 -> arraylist에 넣고 존재하는 값이면 값 바꾸고 없으면 값 추가하기
        Arrays.sort(c, (a,b)->a[0]==b[0]? a[1]-b[1]:a[0]-b[0]);

        PriorityQueue<Integer> room = new PriorityQueue<>();
        room.add(c[0][1]);
        for(int i=1;i<n;i++){
            if(c[i][0]>=room.peek()){
                room.poll();
                room.add(c[i][1]);
            } else{
                room.add(c[i][1]);
            }
        }
        System.out.println(room.size());
    }
}

0개의 댓글