package org.example.알고리즘.전략망을둘로나누기;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
System.out.println(solution.solution(9, new int[][]{{1, 3}, {2, 3}, {3, 4}, {4, 5}, {4, 6}, {4, 7}, {7, 8}, {7, 9}}));
System.out.println("================================");
System.out.println(solution.solution(4, new int[][]{{1, 2}, {2, 3}, {3, 4}}));
System.out.println("================================");
System.out.println(solution.solution(7, new int[][]{{1, 2}, {2, 7}, {3, 7}, {3, 4}, {4, 5}, {6, 7}}));
}
public int solution(int n, int[][] wires) {
int answer = n;
for (int i = 0; i < wires.length; i++) {
//끊어진 전력망을 만듭니다.
int[][] graph = buildGraph(n, wires, i);
//하나의 전략망을 bfs 돌며 몇개의 송전탑을 가지고 잇는지 체크합니다.
int count = bfs(graph, i);
answer = Math.min(answer, Math.abs((n - count) - count));
}
return answer;
}
private int bfs(int[][] graph, int index) {
System.out.println("graph = " + Arrays.deepToString(graph));
int count = 1;
boolean[] visited = new boolean[graph.length];
Queue<Integer> queue = new LinkedList<>();
queue.add(index);
visited[index] = true;
while (!queue.isEmpty()) {
int polled = queue.poll();
for (int i = 0; i < graph[polled].length; i++) {
if (graph[polled][i] == 1 && !visited[i]) {
queue.add(i);
visited[i] = true;
count++;
}
}
}
return count;
}
public int[][] buildGraph(int n, int[][] wires, int skipIndex) {
int[][] graph = new int[n][n];
for (int i = 0; i < wires.length; i++) {
if (i == skipIndex) { // 끊을 인덱스
continue;
}
int[] wire = wires[i];
int x = wire[0] - 1;
int y = wire[1] - 1;
graph[x][y] = 1;
graph[y][x] = 1;
}
return graph;
}
}
- 하나의 전력망이 끊어진 양방향 그래프를 buildGraph 로 생성한다.
- 생성된 그래프에서 하나의 임의의 인덱스에서 bfs를 순회한 count 값을 사용하여 둘이 차이가 최소가 되는 값을 구한다.
Uploaded by N2T
'자바 > 알고리즘' 카테고리의 다른 글
[프로그래머스] 혼자 놀기의 달인 (0) | 2024.01.02 |
---|---|
[프로그래머스] 합승 택시 요금 [플로이드-워셜] (0) | 2023.12.31 |
[프로그래머스] 귤고르기 (0) | 2023.12.24 |
[프로그래머스] 영어 끝말잇기 (0) | 2023.12.22 |
[알고리즘] PCCP 기출 문제 2번 Java (0) | 2023.12.19 |