n
κ°μ μ‘μ νμ΄ μ μ μ ν΅ν΄ νλμ νΈλ¦¬ ννλ‘ μ°κ²°λμ΄ μμ΅λλ€. λΉμ μ μ΄ μ μ λ€ μ€ νλλ₯Ό λμ΄μ νμ¬μ μ λ ₯λ§ λ€νΈμν¬λ₯Ό 2κ°λ‘ λΆν νλ €κ³ ν©λλ€. μ΄λ, λ μ λ ₯λ§μ΄ κ°κ² λλ μ‘μ νμ κ°μλ₯Ό μ΅λν λΉμ·νκ² λ§μΆκ³ μ ν©λλ€.
μ‘μ νμ κ°μ n
, κ·Έλ¦¬κ³ μ μ μ 보 wires
κ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§λλ€. μ μ λ€ μ€ νλλ₯Ό λμ΄μ μ‘μ ν κ°μκ° κ°λ₯ν λΉμ·νλλ‘ λ μ λ ₯λ§μΌλ‘ λλμμ λ, λ μ λ ₯λ§μ΄ κ°μ§κ³ μλ μ‘μ ν κ°μμ μ°¨μ΄(μ λκ°)λ₯Ό return νλλ‘ solution
ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
n
μ 2 μ΄μ 100 μ΄νμΈ μμ°μμ
λλ€.wires
λ κΈΈμ΄κ° n-1μΈ μ μν 2μ°¨μ λ°°μ΄μ
λλ€.wires
μ κ° μμλ [v1, v2]
2κ°μ μμ°μλ‘ μ΄λ£¨μ΄μ Έ μμΌλ©°, μ΄λ μ λ ₯λ§μ v1
λ² μ‘μ νκ³Ό v2
λ² μ‘μ νμ΄ μ μ μΌλ‘ μ°κ²°λμ΄ μλ€λ κ²μ μλ―Έν©λλ€.1 β€ v1 < v2 β€ n
μ
λλ€.n | wires | result |
---|---|---|
9 | [[1,3],[2,3],[3,4],[4,5],[4,6],[4,7],[7,8],[7,9]] | 3 |
[[1,2],[2,3],[3,4]] | 0 | |
7 | [[1,2],[2,7],[3,7],[3,4],[4,5],[6,7]] | 1 |
λ€μ κ·Έλ¦Όμ μ£Όμ΄μ§ μ
λ ₯μ ν΄κ²°νλ λ°©λ² μ€ νλλ₯Ό λνλΈ κ²μ
λλ€.
4λ²κ³Ό 7λ²μ μ°κ²°νλ μ μ μ λμΌλ©΄ λ μ λ ₯λ§μ κ° 6κ°μ 3κ°μ μ‘μ νμ κ°μ§λ©°, μ΄λ³΄λ€ λ λΉμ·ν κ°μλ‘ μ λ ₯λ§μ λλ μ μμ΅λλ€.
λ λ€λ₯Έ λ°©λ²μΌλ‘λ 3λ²κ³Ό 4λ²μ μ°κ²°νλ μ μ μ λμ΄λ μ΅μ μ μ λ΅μ λμΆν μ μμ΅λλ€.
λ€μ κ·Έλ¦Όμ μ£Όμ΄μ§ μ
λ ₯μ ν΄κ²°νλ λ°©λ²μ λνλΈ κ²μ
λλ€.
2λ²κ³Ό 3λ²μ μ°κ²°νλ μ μ μ λμΌλ©΄ λ μ λ ₯λ§μ΄ λͺ¨λ 2κ°μ μ‘μ νμ κ°μ§κ² λλ©°, μ΄ λ°©λ²μ΄ μ΅μ μ λλ€.
λ€μ κ·Έλ¦Όμ μ£Όμ΄μ§ μ
λ ₯μ ν΄κ²°νλ λ°©λ²μ λνλΈ κ²μ
λλ€.
3λ²κ³Ό 7λ²μ μ°κ²°νλ μ μ μ λμΌλ©΄ λ μ λ ₯λ§μ΄ κ°κ° 4κ°μ 3κ°μ μ‘μ νμ κ°μ§κ² λλ©°, μ΄ λ°©λ²μ΄ μ΅μ μ λλ€.
μ΄ λ¬Έμ μμ μꡬνλ κ²μ λμ μ μ μ κΈ°μ€μΌλ‘ λλμ΄μ§ λ κ·Έλ£Ή μμμμ μ‘μ ν κ°μλ₯Ό κ°κ° νμ
ν΄ κ·Έ μ°¨μ΄κ° μ΅μκ° λλ μ§μ μ΄λ€.
λ°λΌμ λλ μ‘μ νμ μ μ μ νλμ© λμ΄λ³΄λ©΄μ λλμ΄μ§ λ κ·Έλ£Ήμμμμ μ‘μ ν κ°μλ₯Ό κ°κ° BFSλ₯Ό ν΅ν΄ ꡬν΄λ³΄κΈ°λ‘ νμλ€.
import java.util.*;
class Solution {
static int[][] graph;
static boolean[] visited;
public static int solution(int n, int[][] wires) {
int answer = wires.length;
for (int i = 0; i < wires.length; i++) {
graph = new int[n + 1][n + 1]; // κ·Έλν μ΄κΈ°ν
visited = new boolean[n + 1]; // λ°©λ¬Έ μ¬λΆ μ΄κΈ°ν
// μ‘μ ν μ°κ²° μ 보 μ μ₯
for (int j = 0; j < wires.length; j++) {
// iλ²μ§Έ μ°κ²°μ μ μΈνκ³ μ μ₯
if (wires[j] != wires[i]) {
graph[wires[j][0]][wires[j][1]] = 1;
graph[wires[j][1]][wires[j][0]] = 1;
}
}
// λ κ°μ μΆλ°μ§λ‘ λλκΈ°
int start1 = wires[i][0]; // 첫 λ²μ§Έ μΆλ°μ§
int start2 = wires[i][1]; // λ λ²μ§Έ μΆλ°μ§
int sum1 = bfs(start1, n); // 첫 λ²μ§Έ μ‘μ ν κ°μ
int sum2 = bfs(start2, n); // λ λ²μ§Έ μ‘μ ν κ°μ
// sum1 - sum2 μ΅μκ° μ
λ°μ΄νΈ
if (answer > Math.abs(sum1 - sum2)) {
answer = Math.abs(sum1 - sum2);
}
}
return answer;
}
// bfs
public static int bfs(int start, int n) {
Queue<Integer> queue = new LinkedList<>(); // bfsλ₯Ό μν ν μμ±
queue.offer(start); // μμμ
visited[start] = true; // λ°©λ¬Έ μ¬λΆ
int count = 1; // μμ μ‘μ ν ν¬ν¨
while (!queue.isEmpty()) {
int current = queue.poll();
for (int i = 1; i <= n; i++) {
if (graph[current][i] == 1 && !visited[i]) {
visited[i] = true;
queue.offer(i);
count++;
}
}
}
return count;
}
}
μ‘μ ν μ°κ²° μ 보λ₯Ό μ μ₯νλ€.
wires
μ μ μ₯λμ΄ μλ μ°κ²° μ 보 μ€ i
λ²μ§Έ μ°κ²°μ μ μΈνκ³ μΈμ νλ ¬ graph
μ μ μ₯νλ€.
μ μΈν μ°κ²°μ μ λ λ
Έλλ₯Ό start1
κ³Ό start2
μ κ°κ° μ μ₯νλ€.
λ λ Έλλ₯Ό κΈ°μ€μΌλ‘ bfsλ₯Ό κ°κ° μνν΄ κ° κ·Έλ£Ή μμ μλ μ‘μ νμ κ°μλ₯Ό ꡬνλ€.
λ κ·Έλ£Ήμ κ° μ‘μ ν κ°μ sum1
, sum2
μ μ°¨μ΄μ μ΅μκ°μ answer
μ μ μ₯νλ€.
γ γ γ γ γ γ γ μ μ 지 λ λ΄λ μκΈ°λ€