송전탑의 개수 n, 그리고 전선 정보 wires가 매개변수로 주어질 때, 전선들 중 하나를 끊어서 송전탑 개수가 가능한 비슷하도록 두 전력망으로 나누어 송전탑 개수의 차이를 return하는 solution 함수를 작성하는 문제이다.
import java.util.HashSet;
import java.util.LinkedList;
class Solution {
public int solution(int n, int[][] wires) {
int answer = -1;
int min = n;
for (int i = 0; i < wires.length; i++) {
int vmv = v1_minus_v2(i, wires);
if (vmv < min)
min = vmv;
}
answer = min;
return answer;
}
private int v1_minus_v2(int except, int[][] wires) {
int vmv = 0;
HashSet<Integer> set1 = new HashSet<>();
HashSet<Integer> set2 = new HashSet<>();
set1.add(wires[except][0]);
set2.add(wires[except][1]);
LinkedList<String> queue = new LinkedList<>();
for (int i = 0; i < wires.length; i++) {
if (i == except)
continue;
queue.add(wires[i][0] + " " + wires[i][1]);
}
while(!queue.isEmpty()) {
String tar = queue.poll();
String[] arr_tar = tar.split(" ");
int[] itar = new int[2];
for (int i = 0; i < itar.length; i++) {
itar[i] = Integer.parseInt(arr_tar[i]);
}
if (set1.contains(itar[0]) || set1.contains(itar[1])) {
set1.add(itar[0]);
set1.add(itar[1]);
} else if (set2.contains(itar[0]) || set2.contains(itar[1])) {
set2.add(itar[0]);
set2.add(itar[1]);
} else {
queue.add(tar);
}
}
vmv = set1.size() - set2.size();
if (vmv < 0)
vmv *= -1;
return vmv;
}
}