๐ 1. ๋ฌธ์ ์ค๋ช
์ ์ถ๋ ฅ ์ ์ค๋ช
์
์ถ๋ ฅ ์ #1
๋ค์ ๊ทธ๋ฆผ์ ์ฃผ์ด์ง ์
๋ ฅ์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ ์ค ํ๋๋ฅผ ๋ํ๋ธ ๊ฒ์
๋๋ค.
4๋ฒ๊ณผ 7๋ฒ์ ์ฐ๊ฒฐํ๋ ์ ์ ์ ๋์ผ๋ฉด ๋ ์ ๋ ฅ๋ง์ ๊ฐ 6๊ฐ์ 3๊ฐ์ ์ก์ ํ์ ๊ฐ์ง๋ฉฐ, ์ด๋ณด๋ค ๋ ๋น์ทํ ๊ฐ์๋ก ์ ๋ ฅ๋ง์ ๋๋ ์ ์์ต๋๋ค.
๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋ 3๋ฒ๊ณผ 4๋ฒ์ ์ฐ๊ฒฐํ๋ ์ ์ ์ ๋์ด๋ ์ต์ ์ ์ ๋ต์ ๋์ถํ ์ ์์ต๋๋ค.
์
์ถ๋ ฅ ์ #2
๋ค์ ๊ทธ๋ฆผ์ ์ฃผ์ด์ง ์
๋ ฅ์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ๋ธ ๊ฒ์
๋๋ค.
2๋ฒ๊ณผ 3๋ฒ์ ์ฐ๊ฒฐํ๋ ์ ์ ์ ๋์ผ๋ฉด ๋ ์ ๋ ฅ๋ง์ด ๋ชจ๋ 2๊ฐ์ ์ก์ ํ์ ๊ฐ์ง๊ฒ ๋๋ฉฐ, ์ด ๋ฐฉ๋ฒ์ด ์ต์ ์ ๋๋ค.
์ ์ถ๋ ฅ ์ #3
๋ค์ ๊ทธ๋ฆผ์ ์ฃผ์ด์ง ์ ๋ ฅ์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ๋ธ ๊ฒ์ ๋๋ค.
3๋ฒ๊ณผ 7๋ฒ์ ์ฐ๊ฒฐํ๋ ์ ์ ์ ๋์ผ๋ฉด ๋ ์ ๋ ฅ๋ง์ด ๊ฐ๊ฐ 4๊ฐ์ 3๊ฐ์ ์ก์ ํ์ ๊ฐ์ง๊ฒ ๋๋ฉฐ, ์ด ๋ฐฉ๋ฒ์ด ์ต์ ์ ๋๋ค.
๐ก 2. ์ ๊ทผ๋ฐฉ์
์ด ๋ฌธ์ ์์ ์ค์ํ ์ ์ ์ ๋ ฅ๋ง์ ๊ตฌ์กฐ๊ฐ ํ๋์ ํธ๋ฆฌ๋ผ๋ ๊ฒ์ด๋ค. ์ ์ ์ ํ๋ ๋์์ ๋ 3๊ฐ๋ 4๊ฐ๊ฐ ์๋ ๋ฐ๋์ ๋ ๊ฐ๊ฐ ๋๋ค. ๋ถํ ๋ ์ ๋ ฅ๋ง์์ ์ก์ ํ ๊ฐ์๋ฅผ ๊ตฌํ๋ค์ ์๋ก์ ์ฐจ์ด๋ฅผ ๊ณ์ฐํ๋ ๊ฒ๋ณด๋ค ์ด์ฐจํผ ๋ ๊ฐ๋ก ๋ถํ ๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ `์ ์ฒด ์ก์ ํ์ ๊ฐ์ - ํ ์ชฝ์ ์ก์ ํ ๊ฐ์`๋ฅผ ํด ์ค๋ ๋๋ค.
ํธ๋ฆฌ ํ์์ ํด ์ฃผ๋ฉด ๋๋๋ฐ ์ด ๋ฌธ์ ์์๋ ์ต์ ์ด๋ ์ต์๊ฐ ๊ตฌํ๋๊ฒ ์๋๊ธฐ ๋๋ฌธ์ `๊น์ด ์ฐ์ ํ์(DFS)`์ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ ์ฒด ์ ๋ ฅ๋ง์ ๋ํด ๊น์ด ์ฐ์ ํ์์ ํ๋ฉด์ ์์ ๋ ธ๋์ ์๋ฅผ ๊ณ์ฐํด์
| (์ ์ฒด ๋ ธ๋ - ์์ ํธ๋ฆฌ์ ๋ ธ๋ ์) - (์์ ํธ๋ฆฌ์ ๋ ธ๋ ์) |
์ ์ ๋๊ฐ์ด ๊ฐ์ฅ ์์ ๊ฒ์ ์ฐพ์ผ๋ฉด ๋๋ค.
โญ 3. ์ฝ๋
import java.util.*;
class Solution {
// ๋ฐฉ๋ฌธํ ๋
ธ๋์ธ์ง ์ฒดํฌ, false๋ก ์ด๊ธฐํ
private static boolean[] visited;
// ์ ์ ์ฐ๊ฒฐ ์ ๋ณด ์ ์ฅํ ์ธ์ ๋ฆฌ์คํธ
private static ArrayList<Integer>[] adjList;
// ์ก์ ํ ๊ฐ์, ๋ฐํํ ๊ฐ
private static int N, answer;
public int solution(int n, int[][] wires) {
N = n;
// ๋คํธ์ํฌ๊ฐ ๋จ์ ๋์์ ๋, ๋ ๋ถ๋ถ์ผ๋ก ๋๋๋ ์ก์ ํ ๊ฐ์ ์ฐจ์ด์ ์ต๋๊ฐ์ n−1
answer = n - 1;
// 1. ์ ์ ์ฐ๊ฒฐ ์ ๋ณด ์ ์ฅํ ์ธ์ ๋ฆฌ์คํธ ์ด๊ธฐํ
adjList = new ArrayList[n + 1];
for (int i = 1; i <= n; i++) {
adjList[i] = new ArrayList<>();
}
// 2. ์ ์ ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ ์ฅ(์๋ฐฉํฅ)
for (int[] wire : wires) {
adjList[wire[0]].add(wire[1]);
adjList[wire[1]].add(wire[0]);
}
visited = new boolean[n + 1];
// 3. ๊น์ด ์ฐ์ ํ์ ์์
dfs(1);
return answer;
}
private static int dfs(int now) {
visited[now] = true;
// 4. ์์ ๋
ธ๋์ ์๋ฅผ ์ ์ฅํ๊ณ ๋ฐํํ ๋ณ์ sum
int sum = 0;
// 5. ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ ์ ์ ํ์ธ
for (int next : adjList[now]) {
if (!visited[next]) {
// 6. (์ ์ฒด ๋
ธ๋ - ์์ํธ๋ฆฌ์ ๋
ธ๋ ์) - (์์ํธ๋ฆฌ์ ๋
ธ๋ ์)
// ์ ์ ๋๊ฐ์ด ๊ฐ์ฅ ์์ ๊ฐ ๊ตฌํ๊ธฐ
int cnt = dfs(next);
answer = Math.min(answer, Math.abs(N - cnt * 2));
// 7. ์์ ๋
ธ๋์ ์ ๋ํจ
sum += cnt;
}
}
// 9. ์ ์ฒด ์์ ๋
ธ๋์ ์์ 1(ํ์ฌ now ๋
ธ๋)์ ๋ํด์ ๋ฐํ
return sum + 1;
}
}
1. ์ ์ ์ ์ฐ๊ฒฐ ์ ๋ณด ์ ์ฅํ ์ธ์ ๋ฆฌ์คํธ ์ด๊ธฐํ
์ก์ ํ ๋ฒํธ๊ฐ 0 ์๋๊ตฌ 1๋ฒ๋ถํฐ ์์ํ๋๊น ArrayList ๋ฐฐ์ด์ ํฌ๊ธฐ๋ ์ก์ ํ์ ์ + 1
2. ์ ์ ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ์ธ์ ๋ฆฌ์คํธ์ ์ ์ฅ
์ฐ๊ฒฐ๋ง ๋์ด ์๋ค๋ฉด ํ์์ ํ ์ ์๋๋ก ์๋ฐฉํฅ์ผ๋ก ๊ตฌํ
for (int[] wire : wires) {
adjList[wire[0]].add(wire[1]);
adjList[wire[1]].add(wire[0]);
}
์ด๋ ๊ฒ ํด ์ฃผ๋ฉด ๋ง์ฝ wires๊ฐ [[1,3], [2,3], [3,4], [4,5]]์ผ ๋
adjList[1] = [3]
adjList[3] = [1]
adjList[2] = [3]
adjList[3] = [1, 2]
adjList[3] = [3, 4]
adjList[4] = [3]
adjList[4] = [3, 5]
adjList[5] = [4]
์ด๋ ๊ฒ ํ๋ฉด ์์ชฝ ์ก์ ํ ๋ชจ๋ ๋ค๋ฅธ ์ก์ ํ๊ณผ ์ฐ๊ฒฐ๋์ด ์๋ค๋ ์ ๋ณด๋ฅผ ์ ์ฅํ ์ ์๋ค.
3. 1๋ฒ ์ก์ ํ๋ถํฐ ๊น์ด ์ฐ์ ํ์์์, ์ด๋ค ์ ์ ๋ถํฐ ํ์์ ์์ํด๋ ๋์ผํ ๊ฐ์ด ๋์จ๋ค
4. ์์ ์ ์์ ํธ๋ฆฌ์ ๋ ธ๋์ ์์ ์ ํฌํจํ ์ ์ฒด ๋ ธ๋์ ์๋ฅผ ๋ฐํํ ๋ณ์ sum ์ ์ธ
5. ํ์ฌ ๋ ธ๋(์ก์ ํ)์์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ ์ ํ์ธ
dfs์ ๋งค๊ฐ๋ณ์ now๋ ํ์ฌ ๋ฐฉ๋ฌธ ์ค์ธ ๋ ธ๋(์ก์ ํ)๋ก ์ฝ๋์์ dfs ํจ์๊ฐ ํธ์ถ๋ ๋๋ง๋ค, now๋ ๊ทธ๋๊ทธ๋ ๋ฐฉ๋ฌธํ๊ณ ์๋ ๋ ธ๋์ด๋ค. ์ด ๊ฐ์ ํตํด์ ๊น์ด ์ฐ์ ํ์(DFS)์ ํด ์ค๋ค.
6. | (์ ์ฒด ๋ ธ๋ - ์์ ํธ๋ฆฌ์ ๋ ธ๋ ์) - (์์ ํธ๋ฆฌ์ ๋ ธ๋ ์) | ์ ๋๊ฐ ๊ณ์ฐํด์ ์ต์๊ฐ์ answer์ ์ ์ฅ
์๋ฅผ ๋ค์ด, ์ก์ ํ์ ์ด ๊ฐ์๊ฐ 6๊ฐ์ด๊ณ
์ด๊ฑธ ๋๋ก ๋๋ A๋ถ๋ถ์ ์์ ํธ๋ฆฌ์ ๋
ธ๋ ์๊ฐ 3๊ฐ๋ผ๋ฉด
๋๋จธ์ง ์ก์ ํ(B)์ ๊ฐ์๋ 6 - 3 = 3๊ฐ์ด๋ค.
B์ ํฌ๊ธฐ - A์ ํฌ๊ธฐ์ ์ ๋๊ฐ ์์ฐ๋ฉด 3 - 3 = 0
์ด ๊ฐ์ด A๋ถ๋ถ๊ณผ B ๋ถ๋ถ์ ์ก์ ํ ๊ฐ์์ ์ฐจ์ด์ด๊ณ , ํ์ฌ answer์ ๋ด๊ธด ๊ฐ๊ณผ ํ์ฌ ๊ณ์ฐํด ์ค ๊ฐ์ ๋น๊ต ํด์ ๋ ์์ ๊ฐ์ผ๋ก answer์ ์ ๋ฐ์ดํธ ํ๋ค.
7. ์์ ํธ๋ฆฌ์ ๋ ธ๋ ์๋ฅผ sum์ ๋ํจ
8. ์์ ์ ์ ์ฒด ์์ ํธ๋ฆฌ์ ๋ ธ๋ ์ + 1ํด์ ์๊ธฐ ์์ ์ ํฌํจํ ํ์ ํธ๋ฆฌ์ ๋ชจ๋ ๋ ธ๋ ์ ๋ฐํ
๐๐ป 4. ๊ฐ์ ์ ํ ๋ฌธ์
'Algorithm > Programmers_Best' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ์ฒด์ก๋ณต (Greedy) (59) | 2024.12.06 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ๋ชจ์์ฌ์ (์์ ํ์) (56) | 2024.11.23 |
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ํผ๋ก๋ (์์ ํ์) (56) | 2024.11.22 |
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ์นดํซ (์์ ํ์) (70) | 2024.11.22 |
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ๋ชจ์๊ณ ์ฌ ๋ฌธ์ ํ์ด (์์ ํ์) (39) | 2024.11.15 |