https://programmers.co.kr/learn/courses/30/lessons/86971
๋ฌธ์
n๊ฐ์ ์ก์ ํ์ด ์ ์ ์ ํตํด ํ๋์ ํธ๋ฆฌ ํํ๋ก ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค. ๋น์ ์ ์ด ์ ์ ๋ค ์ค ํ๋๋ฅผ ๋์ด์ ํ์ฌ์ ์ ๋ ฅ๋ง ๋คํธ์ํฌ๋ฅผ 2๊ฐ๋ก ๋ถํ ํ๋ ค๊ณ ํฉ๋๋ค. ์ด๋, ๋ ์ ๋ ฅ๋ง์ด ๊ฐ๊ฒ ๋๋ ์ก์ ํ์ ๊ฐ์๋ฅผ ์ต๋ํ ๋น์ทํ๊ฒ ๋ง์ถ๊ณ ์ ํฉ๋๋ค.
์ก์ ํ์ ๊ฐ์ n, ๊ทธ๋ฆฌ๊ณ ์ ์ ์ ๋ณด wires๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ์ ์ ๋ค ์ค ํ๋๋ฅผ ๋์ด์ ์ก์ ํ ๊ฐ์๊ฐ ๊ฐ๋ฅํ ๋น์ทํ๋๋ก ๋ ์ ๋ ฅ๋ง์ผ๋ก ๋๋์์ ๋, ๋ ์ ๋ ฅ๋ง์ด ๊ฐ์ง๊ณ ์๋ ์ก์ ํ ๊ฐ์์ ์ฐจ์ด(์ ๋๊ฐ)๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ ์ฌํญ
- n์ 2 ์ด์ 100 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
- wires๋ ๊ธธ์ด๊ฐ n-1์ธ ์ ์ํ 2์ฐจ์ ๋ฐฐ์ด์
๋๋ค.
- wires์ ๊ฐ ์์๋ [v1, v2] 2๊ฐ์ ์์ฐ์๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ์ด๋ ์ ๋ ฅ๋ง์ v1๋ฒ ์ก์ ํ๊ณผ v2๋ฒ ์ก์ ํ์ด ์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
- 1 ≤ v1 < v2 ≤ n ์ ๋๋ค.
- ์ ๋ ฅ๋ง ๋คํธ์ํฌ๊ฐ ํ๋์ ํธ๋ฆฌ ํํ๊ฐ ์๋ ๊ฒฝ์ฐ๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง์ง ์์ต๋๋ค.
ํ์ด
Brute_Force ํํ๋ก DFS๋ฅผ ๋๋ ธ๋ค.
์ฌ์ค ์ด ๋ฐฉ๋ฒ โผ๏ธ๋ฌด์กฐ๊ฑดโผ๏ธ ์๊ฐ ์ด๊ณผ ๋ ์ค ์๋๋๋ฐ.. ์๊ฐ์ด ๊ฝค๋ ๋๋ํ ๋ฏ ;;
wires์ ์ ์ ๋ค์ wiresList์ ์ธ์ ๋ฆฌ์คํธ๋ก ์ ์ฅํ ๋, ํ๋์ฉ ๋นผ๊ณ ์ ์ฅํ ํ
DFS๋ฅผ ๋๋ ค์ ์ฐจ์ด๋ฅผ ์ฐพ์๋ค.
์ฝ๋๊ฐ ๊ฝค๋ ๋์ ๋ถ์ด ใฐ๏ธ
์ฝ๋
import java.util.ArrayList;
public class Main_P_9์ฃผ์ฐจ_์ ๋ ฅ๋ง์๋๋ก๋๋๊ธฐ {
static int N, towerNum = 0;
static int[] towerCnt = new int[2];
static boolean[] isVisited;
static ArrayList<Integer> wiresList[];
public static int solution(int n, int[][] wires) {
int answer = Integer.MAX_VALUE;
N = n;
int idx = 0;
while (true) {
wiresList = new ArrayList[N + 1];
for (int i = 0; i < N + 1; i++) {
wiresList[i] = new ArrayList<>();
}
isVisited = new boolean[N + 1];
for (int i = 0; i < wires.length; i++) {
if (idx == i)
continue;
wiresList[wires[i][0]].add(wires[i][1]);
wiresList[wires[i][1]].add(wires[i][0]);
}
int cntIdx = 0;
for (int j = 1; j <= N; j++) {
towerNum = 1;
if (!isVisited[j]) {
isVisited[j] = true;
DFS(j);
towerCnt[cntIdx++] = towerNum;
}
}
answer = Math.min(answer, Math.abs(towerCnt[0] - towerCnt[1]));
idx++;
if (idx > N)
break;
}
return answer;
}
private static void DFS(int n) {
for (int t : wiresList[n]) {
if (!isVisited[t]) {
isVisited[t] = true;
towerNum++;
DFS(t);
}
}
return;
}
public static void main(String[] args) {
int[][] wires = { { 1, 3 }, { 2, 3 }, { 3, 4 }, { 4, 5 }, { 4, 6 }, { 4, 7 }, { 7, 8 }, { 7, 9 } };
System.out.println(solution(9, wires));
}
}