알고리즘/프로그래머스
전력망을 둘로 나누기
베리영young
2024. 1. 18. 12:09
사용 알고리즘: bfs
사용 언어: java
import java.util.*;
import java.io.*;
class Solution {
static int answer = 100; //n은 100이하
static ArrayList<Integer>[] tree;
public static int solution(int n, int[][] wires) {
ArrayList<Integer>[] tree;
tree = new ArrayList[n+1];
for(int i=0; i<n+1; i++) {
tree[i] = new ArrayList<Integer>();
}
for(int i=0; i<wires.length; i++) {
tree[wires[i][0]].add(wires[i][1]);
tree[wires[i][1]].add(wires[i][0]);
}
for(int i=0; i<wires.length; i++) {
tree[wires[i][0]].remove(Integer.valueOf(wires[i][1]));
tree[wires[i][1]].remove(Integer.valueOf(wires[i][0]));
boolean[] visited = new boolean[1+n];
visited[1] = true;
int firstGroup = bfs(1, n, visited, tree, answer);
int gap = Math.abs(firstGroup - (n - firstGroup));
answer = Math.min(answer, gap);
tree[wires[i][0]].add(wires[i][1]);
tree[wires[i][1]].add(wires[i][0]);
}
return answer;
}
public static int bfs(int start, int n, boolean[] visited, ArrayList<Integer>[] tree, int answer) {
Queue<Integer> q = new ArrayDeque<>();
q.offer(start);
int firstGroup = 1;
while(!q.isEmpty()) {
int p = q.poll();
for(int i : tree[p]) {
if(!visited[i]) {
firstGroup++;
visited[i] = true;
q.offer(i);
}
}
}
return firstGroup;
} //bfs
}
이슈:
static 어쩌구 에러...
둘 사이의 차이는 (한 그룹의 개수)와 (전체 - 한 그룹의 개수)!!