λ¬Έμ (μΆμ²: https://www.acmicpc.net/problem/1379)
< κ°μμ€ 2 >
λ¬Έμ νμ΄
μ°μ μμ ν 2κ°λ₯Ό μ¬μ©ν΄μ λ¬Έμ λ₯Ό ν΄κ²°νλ€.
μ°μ μμ ν aμλ [κ°μ μμ μκ°, κ°μ λλλ μκ°, κ°μ λ²νΈ] λ°°μ΄μ μ μ₯ν΄μ μ°μ μμλ₯Ό κ°μ μμμκ°μ΄ λΉ λ₯Έ μμΌλ‘, μμ μκ°μ΄ κ°λ€λ©΄ λλλ μκ°μ΄ λΉ λ₯Έ μμΌλ‘ μ λ ¬νλ€.
λ€λ₯Έ μ°μ μμ ν bμλ [κ°μ λλλ μκ°, κ°μμ€ λ²νΈ]λ₯Ό μ μ₯ν΄μ μ°μ μμλ₯Ό κ°μ λλλ μκ°μ΄ λΉ λ₯Έ μμΌλ‘, κ°μμ€ λ²νΈκ° μμ μμΌλ‘ μ λ ¬νλ€.
aμ κ°μ μμλλ‘ bμ μ μ₯νλλ°, bμ μ € μμ κ°μ κ°μ λλλ μκ°λ³΄λ€ aμμμ κ°μ μμ μκ°μ΄ κ°κ±°λ ν¬λ€λ©΄ bμ 맨 μμ κ°μκ° λλ νμ κ·Έ κ°μμ€μ μ¬μ©ν μ μλ€λ λ»μ΄λ―λ‘ bμ κ°μ poll ν ν μ μ₯ν΄ μ€λ€.
μ΄λ, κ·Έ κ°μ λ²νΈλ₯Ό indexλ‘ νλ λ°°μ΄μ κ°μμ€ λ²νΈλ₯Ό μ μ₯ν΄ μ€λ€.
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.Comparator;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class _1379_ { // κ°μμ€ 2
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());
int result[] = new int[n + 1];
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());
int num = Integer.parseInt(st.nextToken());
queue.add(new int[] { Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()), num });
}
PriorityQueue<int[]> room = 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];
}
});
int lecture[] = queue.poll();
room.add(new int[] { lecture[1], 1 });
result[lecture[2]] = 1;
int idx = -1;
while (!queue.isEmpty()) {
lecture = queue.poll();
idx = -1;
if (room.peek()[0] <= lecture[0]) {
int temp[] = room.poll();
idx = temp[1];
}
if (idx == -1) {
idx = room.size() + 1;
}
result[lecture[2]]=idx;
room.add(new int[] { lecture[1], idx });
}
bw.write(room.size() + "\n");
for (int i = 1; i <= n; i++) {
bw.write(result[i] + "\n");
}
bw.flush();
}
}
Main
λ³μ)
n : κ°μ μ
result : κ° κ°μμ λ°°μ ν κ°μμ€ λ²νΈ
queue: μ°μ μμ ν [κ°μ μμ μκ°, κ°μ λλ μκ°, κ°μ λ²νΈ]
room: μ°μ μμ ν [κ°μ λλ μκ°, κ°μμ€ λ²νΈ]
- κ°μ μ(n) μ λ ₯
- κ°μ μλ§νΌ μ λ ₯λ°μ μ°μ μμ ν queueμ μ μ₯
- room μ°μ μμ νμ queue κ°μ λ½μ λ¨Όμ κ°μμ€ νλ μ μ₯
- queue κ° λΉ λκΉμ§ λ°λ³΅
: room μ°μ μμ νμ μ € 첫 λ²μ§Έ κ°μ΄ λ€μ΄κ° κ° λ³΄λ€ μκ±°λ κ°λ€λ©΄ κ°μκ° λλ ν λ€μ κ°μλ₯Ό μμν μ μλ€λ λ»μ΄λ―λ‘ poll ν μΆκ°
: poll νλ€λ©΄ κ·Έ κ°μμ€μ λ€μ΄κ°μΌ νλ―λ‘ κ°μμ€ λ²νΈλ‘ μ μ₯ But μλ‘μ΄ κ°μμ€μ΄λΌλ©΄ κ°μμ€ λ²νΈλ‘ roomμ size+1μ μ μ₯
- κ°μμ€ κ°μμ κ° κ°μμ λ°°μ ν κ°μμ€ λ²νΈλ₯Ό μμλλ‘ μΆλ ₯
'πAlgorithm > π₯Baekjoon' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Baekjoon] 12764_μΈμ§λ°©μ κ° μ€ν (0) | 2023.08.17 |
---|---|
[Baekjoon] 18917_μμ΄κ³Ό 쿼리 38 (0) | 2023.08.16 |
[Baekjoon] 1374_κ°μμ€ (0) | 2023.08.15 |
[Baekjoon] 19598_μ΅μ νμμ€ κ°μ (0) | 2023.08.14 |
[Baekjoon] 11000_κ°μμ€ λ°°μ (0) | 2023.08.14 |