Algorithm/항해99(4기)
99클럽 코테 스터디 25일차 TIL : brute force 알고리즘(백준- 주사위 쌓기)
_dear
2024. 11. 22. 09:13
💡 풀이
-
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);
}
}
}
}
📌 오늘의 회고