[Boj_12764] ์‹ธ์ง€๋ฐฉ์— ๊ฐ„ ์ค€ํ•˜

๐Ÿ“Ž ๋ฌธ์ œ ๋งํฌ

https://www.acmicpc.net/problem/12764

 

โ–ธ ๋ฌธ์ œ

ํ˜„์žฌ ๋Œ€ํ•œ๋ฏผ๊ตญ ํ•ด๊ตฐ์— ์†Œ์†๋˜์–ด์žˆ๋Š” ์ค€ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด ๋งค์ผ๊ฐ™์ด ์‚ฌ์ด๋ฒ„ ์ง€์‹ ์ •๋ณด๋ฐฉ ํ†ต์นญ ์‹ธ์ง€๋ฐฉ์— ๋‹ค๋‹Œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ตœ๊ทผ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋‹ค. ์‹ธ์ง€๋ฐฉ์— ์‚ฌ๋žŒ์ด ๋ชฐ๋ ค ์ปดํ“จํ„ฐ ์ˆ˜๊ฐ€ ๋ชจ์ž๋ผ๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฐ ์‚ฌํƒœ๋ฅผ ๋„์ €ํžˆ ์šฉ๋‚ฉํ•  ์ˆ˜ ์—†์—ˆ๋˜ ์ค€ํ•˜๋Š” ๊ณง ์ „์—ญํ•˜๋Š” ์„ ์ž„์„ ์„ค๋“ํ•ด ๋ฏผ์›์„ ๋„ฃ๋„๋ก ํ•˜๋Š” ๋ฐ ์„ฑ๊ณตํ–ˆ๋‹ค.

๋งˆ์นจ๋‚ด ๋ถ€๋Œ€์—์„œ๋Š” ๋ฏผ์›์„ ๋ฐ›์•„๋“ค์ด๊ธฐ๋กœ ํ•˜์˜€๊ณ , ์ปดํ“จํ„ฐ๋ฅผ ์ฆ์„คํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋˜ํ•œ, ์ปดํ“จํ„ฐ ๊ฐ„์˜ ์‚ฌ์šฉ๋ฅ ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์„ฑ๋Šฅ์˜ ์ปดํ“จํ„ฐ๋ฅผ ์„ค์น˜ํ•˜๊ณ ์ž ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์˜ˆ์‚ฐ์ด ๋ถ€์กฑํ•ด ์‚ฌ๋žŒ ์ˆ˜ ๋งŒํผ ์ปดํ“จํ„ฐ๋ฅผ ์‚ด ์ˆ˜๊ฐ€ ์—†์—ˆ๋‹ค. ๊ณ ์‹ฌ์— ๊ณ ์‹ฌ์„ ๊ฑฐ๋“ญํ•œ ์ค€ํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์ด ํ•ญ์ƒ ์ •ํ•ด์ง„ ์‹œ๊ฐ„์— ์‹ธ์ง€๋ฐฉ์„ ์ด์šฉํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.

์ปดํ“จํ„ฐ๊ฐ€ ์žˆ๋Š” ์ž๋ฆฌ์—๋Š” 1๋ฒˆ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ ธ ์žˆ๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ์€ ์‹ธ์ง€๋ฐฉ์— ๋“ค์–ด์™”์„ ๋•Œ ๋น„์–ด์žˆ๋Š” ์ž๋ฆฌ ์ค‘์—์„œ ๋ฒˆํ˜ธ๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ์ž๋ฆฌ์— ์•‰๋Š” ๊ฒƒ์ด ๊ทœ์น™์ด๋‹ค.

์ค€ํ•˜๊ฐ€ ๋ฐœ๊ฒฌํ•œ ์‚ฌ์‹ค๊ณผ ์ด์šฉ ๊ทœ์น™์„ ๊ฐ€์ง€๊ณ , ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์‹ธ์ง€๋ฐฉ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ปดํ“จํ„ฐ์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜์™€ ์ž๋ฆฌ๋ณ„๋กœ ๋ช‡ ๋ช…์˜ ์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ–ˆ๋Š”๊ฐ€๋ฅผ ๊ตฌํ•˜์‹œ์˜ค.

 

โ–ธ ์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์‚ฌ๋žŒ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 100,000)๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ์„œ ๊ฐ ์‚ฌ๋žŒ์˜ ์ปดํ“จํ„ฐ ์ด์šฉ ์‹œ์ž‘ ์‹œ๊ฐ P์™€ ์ข…๋ฃŒ ์‹œ๊ฐ Q๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (0 ≤ P < Q ≤ 1,000,000)

์‹œ์ž‘ ์‹œ๊ฐ์ด๋‚˜ ์ข…๋ฃŒ ์‹œ๊ฐ์ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ๊ณผ ๊ฒน์น˜๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.

 

โ–ธ ์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์‚ฌ๋žŒ์ด ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์•„๋„ ๋˜๋Š” ์ปดํ“จํ„ฐ์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜ X๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๋‘˜์งธ ์ค„์—๋Š” 1๋ฒˆ ์ž๋ฆฌ๋ถ€ํ„ฐ X๋ฒˆ ์ž๋ฆฌ๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ ์ž๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ ์‚ฌ๋žŒ์˜ ์ˆ˜๋ฅผ ๋„์–ด์“ฐ๊ธฐ ๊ฐ„๊ฒฉ์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

 

๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด

  • ๐Ÿฅ‡ ๋ฌธ์ œ ๋ ˆ๋ฒจ : ๊ณจ๋“œ 3
  • ๐Ÿ””  ๋ฌธ์ œ ์œ ํ˜• : ๊ตฌํ˜„, ์ž๋ฃŒ๊ตฌ์กฐ, ์‹œ๋ฎฌ๋ ˆ์ด์…˜, ์šฐ์„ ์ˆœ์œ„ ํ
  • ๐Ÿ’ฌ  ํ’€์ด ์–ธ์–ด : JAVA

 

๐Ÿค” ๋ฌธ์ œ ํ’€์ด

์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ  ๋‘ ๊ฐœ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

๋จผ์ €, ์ž…๋ ฅ๋ฐ›์€ ์‚ฌ๋žŒ๋“ค์˜ ์ปดํ“จํ„ฐ ์ด์šฉ ์‹œ๊ฐ„์„ ์‹œ์ž‘ ์‹œ๊ฐ์ด ์ž‘์€ ๊ฒƒ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•ด ์ค€๋‹ค.

 

์ปดํ“จํ„ฐ ์‚ฌ์šฉ์„ ์™„๋ฃŒํ•˜๋ฉด ํ•ด๋‹น ์ž๋ฆฌ๋Š” ๋น„๊ฒŒ ๋œ๋‹ค.

๋‹ค์Œ ์‚ฌ๋žŒ์€ ํ˜„์žฌ ๋นˆ์ž๋ฆฌ ์ค‘์—์„œ ๋ฒˆํ˜ธ๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ์ž๋ฆฌ์— ์•‰์•„์•ผ ํ•œ๋‹ค.

์ฆ‰, ๋น ๋ฅธ ์ข…๋ฃŒ ์‹œ๊ฐ์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ๋“ค์˜ ์ปดํ“จํ„ฐ ๋ฒˆํ˜ธ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ์ปดํ“จํ„ฐ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง„ ์ปดํ“จํ„ฐ๋ฅผ ์ด์šฉํ•œ๋‹ค.

 

๋”ฐ๋ผ์„œ ์šฐ์„ ์ˆœ์œ„ ํ ๋‘ ๊ฐœ๋ฅผ ์„ ์–ธํ•œ ๋’ค,

์šฐ์„ ์ˆœ์œ„ ํ 1์—๋Š” ์ปดํ“จํ„ฐ์˜ ๋ฒˆํ˜ธ์™€ ์ข…๋ฃŒ ์‹œ๊ฐ์„ ์ €์žฅํ•˜๋ฉฐ, ์ข…๋ฃŒ ์‹œ๊ฐ์ด ์ž‘์€ ๊ฒƒ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

์šฐ์„ ์ˆœ์œ„ ํ 2์—๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํ“จํ„ฐ ๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•œ๋‹ค.

 

์ปดํ“จํ„ฐ๋ฅผ ์ด์šฉ ์ค‘์ธ ์‚ฌ๋žŒ์˜ ์ข…๋ฃŒ ์‹œ๊ฐ๋ณด๋‹ค ํ˜„์žฌ ์‚ฌ๋žŒ์˜ ์‹œ์ž‘ ์‹œ๊ฐ์ด ๋” ์ปค์„œ ์ปดํ“จํ„ฐ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด,

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํ“จํ„ฐ์˜ ๋ฒˆํ˜ธ๋ฅผ ์šฐ์„ ์ˆœ์œ„ ํ 2์— ์ €์žฅํ•œ๋‹ค.

 

์šฐ์„ ์ˆœ์œ„ ํ 2๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด, ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํ“จํ„ฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ํ•ด๋‹น ์ปดํ“จํ„ฐ์˜ ์‚ฌ์šฉ์ž ์ˆ˜๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚ค๊ณ 

์šฐ์„ ์ˆœ์œ„ ํ 1์— ์ปดํ“จํ„ฐ ๋ฒˆํ˜ธ์™€ ํ•ด๋‹น ์ปดํ“จํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์‚ฌ์šฉ์ž์˜ ์ข…๋ฃŒ ์‹œ๊ฐ์„ ์ €์žฅํ•œ๋‹ค.

 

์šฐ์„ ์ˆœ์œ„ ํ 2๊ฐ€ ๋น„์–ด์žˆ๋‹ค๋ฉด, ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํ“จํ„ฐ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ƒˆ๋กœ์šด ์ปดํ“จํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ 

์šฐ์„ ์ˆœ์œ„ ํ 1์— ์ƒˆ๋กœ์šด ์ปดํ“จํ„ฐ ๋ฒˆํ˜ธ์™€ ํ•ด๋‹น ์ปดํ“จํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์‚ฌ์šฉ์ž์˜ ์ข…๋ฃŒ ์‹œ๊ฐ์„ ์ €์žฅํ•œ๋‹ค.

 

์œ„ ํ’€์ด๋Œ€๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

โœ” ์ตœ์ข… ์ฝ”๋“œ

๋ฉ”๋ชจ๋ฆฌ : 53484KB
์‹œ๊ฐ„ : 648ms
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class Main {
    static public class Time implements Comparable<Time> {
        int start; int end;
        public Time(int start, int end) {
            this.start = start; this.end = end;
        }
        @Override
        public int compareTo(Time o) {
            return this.start - o.start;
        }
    }
    static public class Pos implements Comparable<Pos> {
        int idx; int end;
        public Pos (int idx, int end) {
            this.idx = idx; this.end = end;
        }
        @Override
        public int compareTo(Pos o) {
            return this.end - o.end;
        }
    }
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        ArrayList<Time> list = new ArrayList<>();
        StringTokenizer st;
        int start, end; // ์‹œ์ž‘ ์‹œ๊ฐ„, ์ข…๋ฃŒ ์‹œ๊ฐ„
        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            start = Integer.parseInt(st.nextToken());
            end = Integer.parseInt(st.nextToken());

            // ์‹œ์ž‘ ์‹œ๊ฐ„์ด ๋น ๋ฅธ ์ˆœ
            list.add(new Time(start, end));
        }
        Collections.sort(list);

        int cnt = 0; // ์ปดํ“จํ„ฐ์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜
        int[] room = new int[100001]; // ๊ฐ ์ž๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ ์‚ฌ๋žŒ์˜ ์ˆ˜

        PriorityQueue<Pos> pq = new PriorityQueue<>(); // ์ข…๋ฃŒ ์‹œ๊ฐ„์ด ๋น ๋ฅธ ์ˆœ
        PriorityQueue<Integer> idx = new PriorityQueue<>(); // ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํ“จํ„ฐ์˜ ๋ฒˆํ˜ธ

        for (Time now : list) {
            // ์ปดํ“จํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด
            while (!pq.isEmpty() && pq.peek().end < now.start) {
                // ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํ“จํ„ฐ ๋ฒˆํ˜ธ ์ €์žฅ
                idx.offer(pq.poll().idx);
            }

            if (!idx.isEmpty()) {
                Integer i = idx.poll();
                room[i] += 1;
                pq.offer(new Pos(i, now.end));
            } else { // ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํ“จํ„ฐ X
                cnt++; // ์ƒˆ๋กœ์šด ์ปดํ“จํ„ฐ ์ƒ์„ฑ
                room[cnt] += 1;
                pq.offer(new Pos(cnt, now.end));
            }
        }

        StringBuilder sb = new StringBuilder();
        sb.append(cnt).append("\n");
        for (int i = 1; i <= cnt; i++) {
            sb.append(room[i]).append(" ");
        }
        System.out.println(sb.toString());
    }
}

 

ํ•ด๊ฒฐ ์™„๋ฃŒ ! ๐Ÿ”ฅ