2024. 11. 21. 13:32ใAlgorithm/ํญํด99(4๊ธฐ)

๐ ๋ฌธ์






https://school.programmers.co.kr/learn/courses/30/lessons/86971
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก, ์ฑ์ฉ๊น์ง Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
๐ก ํ์ด
- DFS
- ๋ฐฐ์ด๋ก ๋ ํธ๋ฆฌ ์ขํ๋ค์ LIST๋ฐฐ์ด์ ๋ง๋ค์ด์ ์ ์ฅ ex) ๋ ธ๋ 1์ ์ฐ๊ฒฐ๋ ์ขํ๋ wireList[1] ์ ์ ์ฅ
- divideNetwork(n, wireList, wires[i]) : ์ฃผ์ด์ง wires ์ด์ฐจ๋ฐฐ์ด์ ํ๋์ฉ ๊ฐ์ง๊ณ ์ค๋ฉด์ ํด๋น ์ฐ๊ฒฐ(wires[i])์ ํด์
1. wireList์์ ๋์ ์ฐ๊ฒฐ ์ขํ๋ฅผ ์ ๊ฑฐ ex) wireList[edge[0]].remove((Object)edge[1]);
2. ๋์ ๋ ธ๋ ๊ฐ๊ฐ์์๋ถํฐ dfs ์ถ๋ฐ ex ) dfs(n, wireList, new boolean[n+1], edge, edge[0], true);
3. cnt1, cnt2์ ๊ฐ๊ฐ ๋๋ถ๋ถ์ผ๋ก ๋๋ ์ง ๊ทธ๋ฃน๋ค์ด ๋ช๊ฐ์ ๋
ธ๋๊ฐ ์ฐ๊ฒฐ๋์ด์๋์ง๋ฅผ ์ ์ฅ
4. ์ดํ cnt1, cnt2๋ฅผ ๋บ ์ ๋๊ฐ์ค์ ์ต์๊ฐ์ ์ ์ฅ
import java.util.ArrayList;
import java.util.List;
class Solution {
public int solution(int n, int[][] wires) {
List<Integer>[] wireList = new ArrayList[n+1];
for(int i=1;i<=n;i++) {
wireList[i] = new ArrayList<Integer>();
}
for(int i=0;i<wires.length;i++) {
wireList[wires[i][0]].add(wires[i][1]);
wireList[wires[i][1]].add(wires[i][0]);
}
for(int i=0;i<wires.length;i++) {
divideNetwork(n, wireList, wires[i] );
}
return min;
}
private int cnt1= 0;
private int cnt2= 0;
private int min= Integer.MAX_VALUE;
private void divideNetwork(int n, List<Integer>[] wireList, int[] edge) {
wireList[edge[0]].remove((Object)edge[1]);
wireList[edge[1]].remove((Object)edge[0]);
dfs(n, wireList, new boolean[n+1], edge, edge[0], true);
dfs(n, wireList, new boolean[n+1], edge, edge[1], false);
int absValue = Math.abs(cnt1-cnt2);
min = Math.min(absValue,min);
cnt1 = 0;
cnt2 = 0;
wireList[edge[0]].add(edge[1]);
wireList[edge[1]].add(edge[0]);
}
private void dfs(int n, List<Integer>[] wireList, boolean[] visited, int[] edge, int k, boolean isCnt1) {
visited[k] = true;
if (isCnt1) {
cnt1++;
} else {
cnt2++;
}
for(int node : wireList[k]) {
if(visited[node]==false) {
dfs(n,wireList,visited,edge,node,isCnt1);
}
}
}
}

๐ ์ค๋์ ํ๊ณ
๋ฆ๊ฒ ์์ํ๋๋ ์ ์ถ์ ์๊ฐ์์ ๋ชปํด์ ๋๋๋ฒ๋ ธ๋ค ,,,
๊ทธ๋๋ ํ๋๊ฑฐ ํด๊ฒฐํ๊ณ ์ถ์ด์ ๋ ๋ต๋ตํด์ ๋๊น์ง ํ์ง๋ง ๐ฅบ๐ฅบ๐ฅบ๐ฅบ๐ฅบ๐ฅบ
์์ฝ๋ค์