b3665. μ΅μ’ μμ
https://www.acmicpc.net/problem/3665
π μλ°(Java)λ‘ νΈλ μ΅μ’ μμ λ¬Έμ - λ°±μ€ 3665 ππ
π λ¬Έμ κ°μ
λ°±μ€ 3665λ² - μ΅μ’ μμλ μμ μ λ ¬(Topological Sort)μ μμ©νλ λ¬Έμ μ λλ€.
- μλ μμκ° μ£Όμ΄μ§κ³ ,
- μ¬ν΄ λ°λ μμ μ 보λ€μ΄ μ λ ₯λλ©°,
- κ·Έ μ 보λ₯Ό λ°νμΌλ‘ μ¬ν΄μ μ΅μ’ μμλ₯Ό κ²°μ νλ λ¬Έμ μ λλ€.
λ¨,
- μμλ₯Ό μ νν νλλ‘ μ ν μ μλ€λ©΄ ? μΆλ ₯
- λͺ¨μμ΄ λ°μν΄μ μμλ₯Ό μ ν μ μλ€λ©΄ IMPOSSIBLE μΆλ ₯
π‘ μμ μ λ ₯
1
5
5 4 3 2 1
2
2 4
3 1
π‘ μμ μΆλ ₯
5 3 2 4 1
π μκ³ λ¦¬μ¦ μ κ·Ό λ°©μ
μ΄ λ¬Έμ λ κΈ°λ³Έ μμ μ λ ¬μ
β μμκ° λ°λ κ°μ μ λ€μ§λ μμ (reverse edge)
β μ μ μ§μ μ°¨μ(indegree) μ λ°μ΄νΈ
β μμ μ λ ¬ κ²°κ³Όκ° μ¬λ¬ κ°μΈμ§ λλ μ¬μ΄ν΄μ΄ μλμ§ νλ¨
μ΄ ν¬ν¨λ λ¬Έμ μ λλ€.
πΉ Java μ½λ ν΅μ¬ νλ¦
1. μλ μμλ₯Ό κΈ°λ°μΌλ‘ κΈ°λ³Έ κ·Έλν μμ±
for (int i = 0; i < N; i++) {
for (int j = i + 1; j < N; j++) {
graph[arr[i]].add(arr[j]); // μμμ → λ·μμ
}
}
β μμ 리μ€νΈκ° μμ μμμλ‘ λ λμ μμμ΄λ―λ‘
β μΈμ 리μ€νΈλ₯Ό κΈ°μ€μΌλ‘ κ°μ μΆκ°
2. λ°λ μμ μ 보 λ°μ (κ°μ λ€μ§κΈ°)
if (graph[a].contains(b)) {
graph[a].remove((Integer) b);
graph[b].add(a);
} else {
graph[b].remove((Integer) a);
graph[a].add(b);
}
β a → bμλ κ°μ μ b → aλ‘ λ³κ²½
β λ°λμ κ²½μ°λ λ§μ°¬κ°μ§
β μμ λ³κ²½ μ 보λ₯Ό λ°μν΄μ κ·Έλνλ₯Ό μμ
3. μμ μ λ ¬ μν + κ²°κ³Ό ν΄μ
PriorityQueue<Integer> pq = new PriorityQueue<>();
for (int j = 1; j <= N; j++) {
if (indegree[j] == 0) {
pq.offer(j);
}
}
while (!pq.isEmpty()) {
if (pq.size() > 1) uncertain = true; // κ°λ₯ν μμκ° μ¬λ¬ κ°
int curr = pq.poll();
result.add(curr);
for (int next : graph[curr]) {
indegree[next]--;
if (indegree[next] == 0) pq.offer(next);
}
}
β μ§μ μ°¨μ(indegree)κ° 0μΈ μ μ μ νμ λ£κ³ μμλλ‘ λ°©λ¬Έ
β μ λ΅μ΄ μ μΌνμ§ μμΌλ©΄ ?,
β μ¬μ΄ν΄μ΄ μ‘΄μ¬νλ©΄ λ°©λ¬Έ μκ° Nμ΄ μλ → IMPOSSIBLE
π μΆλ ₯ 쑰건
if (result.size() != N) {
System.out.println("IMPOSSIBLE");
} else if (uncertain) {
System.out.println("?");
} else {
for (int x : result) sb.append(x).append(" ");
System.out.println(sb);
}
β μμ μ λ ¬μ΄ μ μ μ’ λ£λμλμ§
β μ€κ°μ νμ μ¬λ¬ λ Έλκ° λ€μ΄κ° μ μ΄ μλμ§
β μ΄ μ‘°κ±΄λ€μ ν΅ν΄ μν©μ λ§λ μ λ΅ μΆλ ₯
π μ 리
β ν΅μ¬ ν¬μΈνΈ
- μμ μ λ ¬μ κΈ°λ°μΌλ‘ κ°μ λ€μ§κΈ°(μμ μμ ) μ μ©
- κ²°κ³Όκ° ν κ°μ§κ° μλ κ²½μ° ? μ²λ¦¬
- μ¬μ΄ν΄λ‘ μΈν΄ μ λ ¬μ΄ λΆκ°λ₯νλ©΄ IMPOSSIBLE μ²λ¦¬
μ΄ κΈμ΄ λμμ΄ λμ ¨λ€λ©΄ μ’μμμ 곡μ λΆνλ립λλ€! π