๐ ๋ฌธ์ ๋งํฌ
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());
}
}
ํด๊ฒฐ ์๋ฃ ! ๐ฅ
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Boj_14464] ์๊ฐ ๊ธธ์ ๊ฑด๋๊ฐ ์ด์ 4 (1) | 2025.01.16 |
---|---|
[Boj_14466] ์๊ฐ ๊ธธ์ ๊ฑด๋๊ฐ ์ด์ 6 (0) | 2025.01.11 |
[Boj_14431] ์์๋ง์ (0) | 2024.12.26 |
[Boj_11003] ์ต์๊ฐ ์ฐพ๊ธฐ (0) | 2024.12.17 |
[Boj_1497] ๊ธฐํ์ฝ์ํธ (3) | 2024.12.07 |