๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/12764)
< ์ธ์ง๋ฐฉ์ ๊ฐ ์คํ >
๋ฌธ์ ํ์ด
์ฐ์ ์์ ํ 2๊ฐ์ ArrayList, boolean ๋ฐฐ์ด์ ์ฌ์ฉํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
์ฐ์ ์์ ํ a์๋ ์ปดํจํฐ ์ด์ฉ ์์ ์๊ฐ๊ณผ ์ข ๋ฃ ์๊ฐ์ ์ ๋ ฅ๋ฐ์ ์ ์ฅํ์ฌ ์ฐ์ ์์๋ฅผ ์ด์ฉ ์์ ์๊ฐ์ด ๋น ๋ฅธ ์์ผ๋ก, ์์ ์๊ฐ์ด ๊ฐ๋ค๋ฉด ์ข ๋ฃ ์๊ฐ์ด ๋น ๋ฅธ ์์ผ๋ก ์ ๋ ฌํ๋ค.
์ฐ์ ์์ ํ b์๋ ์ปดํจํฐ ์ข ๋ฃ ์๊ฐ๊ณผ ์ปดํจํฐ ๋ฒํธ๋ฅผ ์ ์ฅํ์ฌ ์ฐ์ ์์๋ฅผ ์ข ๋ฃ ์๊ฐ์ด ๋น ๋ฅธ ์์ผ๋ก, ์ข ๋ฃ ์๊ฐ์ด ๊ฐ๋ค๋ฉด ๋ฒํธ๊ฐ ๋น ๋ฅธ ์์ผ๋ก ์ ๋ ฌํ๋ค.
๋ฌธ์ ์์ ๋น์ด์๋ ์๋ฆฌ ์ค์์ ๋ฒํธ๊ฐ ๊ฐ์ฅ ์์ ์๋ฆฌ์ ์๋ ๊ฒ์ด ๊ท์น์ด๋ผ ํ์ผ๋ฏ๋ก ๋จผ์ ๋ค์ ์ฌ๋์ด ๋ค์ด์์ ๋ ์ข ๋ฃ๋๋ ์ปดํจํฐ๋ค์ ์ฐ์ ์์ ํ b์์ poll ํด์ค๋ค. ๊ทธ ํ์ ๋น์ด์๋ ์๋ฆฌ ์ค์ ๋ฒํธ๊ฐ ๊ฐ์ฅ ์์ ๊ณณ์ผ๋ก ์ฌ๋์ ๋ณด๋ธ๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class _12764_ { // ์ธ์ง๋ฐฉ์ ๊ฐ ์คํ
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int n = Integer.parseInt(bf.readLine());
PriorityQueue<int[]> queue = new PriorityQueue<>(new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if (o1[0] == o2[0])
return o1[1] - o2[1];
return o1[0] - o2[0];
}
});
for (int i = 0; i < n; i++) {
st = new StringTokenizer(bf.readLine());
queue.add(new int[] { Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()) });
}
PriorityQueue<int[]> computer = new PriorityQueue<>(new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if (o1[0] == o2[0])
return o1[1] - o2[1];
return o1[0] - o2[0];
}
});
ArrayList<Integer> result = new ArrayList<>();
result.add(0);
boolean check[] = new boolean[n + 1];
result.add(1);
check[1] = true;
computer.add(new int[] { queue.poll()[1], 1 });
while (!queue.isEmpty()) {
int temp[] = queue.poll();
int idx = Integer.MAX_VALUE;
while (!computer.isEmpty() && computer.peek()[0] < temp[0]) {
check[computer.poll()[1]] = false;
}
for (int i = 1; i < n + 1; i++) {
if (!check[i]) {
idx = i;
check[idx]=true;
break;
}
}
if (result.size() > idx) {
result.set(idx, result.get(idx) + 1);
} else {
result.add(1);
}
computer.add(new int[] { temp[1], idx });
}
bw.write(result.size() - 1 + "\n");
for (int i = 1; i < result.size(); i++) {
bw.write(result.get(i) + " ");
}
bw.flush();
}
}
Main
๋ณ์)
n : ์ฌ๋์ ์
queue : ์ฐ์ ์์ ํ [์ปดํจํฐ ์ด์ฉ ์์ ์๊ฐ, ์ปดํจํฐ ์ด์ฉ ์ข ๋ฃ ์๊ฐ]
computer : ์ฐ์ ์์ ํ [์ปดํจํฐ ์ด์ฉ ์ข ๋ฃ ์๊ฐ, ์ปดํจํฐ ๋ฒํธ]
result : ๊ฐ ์๋ฆฌ๋ฅผ ์ด์ฉํ ์ฌ๋์ ์ ์ ์ฅ
check : ์๋ฆฌ๊ฐ ๋น์ด์๋์ง ์ฌ๋ถ
- ์ฌ๋์ ์(n) ์ ๋ ฅ
- ๊ฐ ์ฌ๋์ ์ปดํจํฐ ์ด์ฉ ์์ ์๊ฐ๊ณผ ์ข ๋ฃ ์๊ฐ์ ์ ๋ ฅ๋ฐ์ ์ฐ์ ์์ ํ(queue)์ ์ ์ฅ
- ์ฐ์ ์์ ํ(queue)์ ์ ์ฅ๋ ์ฒซ ๋ฒ์งธ ๊ฐ์ ์ฐ์ ์์ ํ(computer)์ ์ ์ฅ ๋ฐ ์ปดํจํฐ ์ฒซ ๋ฒ์งธ ์๋ฆฌ๊ฐ ๋น์ด์์ง ์๋ค๊ณ ํ์(check)์ ๊ฐ ์๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ฌ๋์ ์๋ฅผ ์ ์ฅํ๊ธฐ ์ํด result์ ๊ฐ ์ถ๊ฐ
- queue๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต
: ๋ค์ ์ฌ๋์ ์ปดํจํฐ ์์ ์๊ฐ๋ณด๋ค ๋นจ๋ฆฌ ๋๋๋ ์๋ฆฌ๋ฅผ ์ฐพ๊ธฐ ์ํด queue์์ ๋ฝ์์จ ์์ ์๊ฐ๋ณด๋ค computer์ ์ฒซ ๋ฒ์งธ ๊ฐ์ ๋๋๋ ์๊ฐ์ด ๋น ๋ฅธ ๊ฒฝ์ฐ computer์์ poll ํด์ฃผ๋ฉฐ ๊ทธ ์๋ฆฌ๋ฅผ ๋น์๋ฆฌ๋ก ์ ์ฅ (์์ ์๊ฐ๋ณด๋ค ๋นจ๋ฆฌ ๋๋๋ ์๋ฆฌ๊ฐ ์ฌ๋ฌ ๊ฐ ์์ ์ ์๋ค)
: ์ปดํจํฐ ์๋ฆฌ๋ฅผ ์์์๋ถํฐ ํ์ํ์ฌ ๋น์๋ฆฌ ์ฐพ๊ธฐ
: ๋น์๋ฆฌ๊ฐ result์ size๋ณด๋ค ์๋ค๋ฉด ์๋ ์๋ ์๋ฆฌ๊ฐ ๋น ๊ฒ์ด๋ฏ๋ก result ๊ฐ +1
: ๋น์๋ฆฌ๊ฐ result์ size๋ณด๋ค ํฌ๋ค๋ฉด ์๋ก์ด ์๋ฆฌ๋ ๋ป์ด๋ฏ๋ก result์ ๊ฐ ์ถ๊ฐ
: computer์ ๊ฐ ์ถ๊ฐ
- ์ปดํจํฐ์ ์ต์ ๊ฐ์์ ์์๋๋ก ๊ฐ ์๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ฌ๋์ ์ ์ถ๋ ฅ
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 2617_๊ตฌ์ฌ ์ฐพ๊ธฐ (0) | 2023.08.18 |
---|---|
[Baekjoon] 17616_๋ฑ์ ์ฐพ๊ธฐ (0) | 2023.08.18 |
[Baekjoon] 18917_์์ด๊ณผ ์ฟผ๋ฆฌ 38 (0) | 2023.08.16 |
[Baekjoon] 1379_๊ฐ์์ค 2 (0) | 2023.08.15 |
[Baekjoon] 1374_๊ฐ์์ค (0) | 2023.08.15 |