csct3434
[level 2] 전력망을 둘로 나누기 - 86971 본문
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
class Solution {
public int solution(int n, int[][] wires) {
int answer = n;
int[] count = new int[n + 1];
boolean[] visited = new boolean[n + 1];
boolean[][] adjacentMatrix = new boolean[n + 1][n + 1];
initAdjacentMatrix(adjacentMatrix, wires);
dfs(n, 1, count, visited, adjacentMatrix);
for (int[] wire : wires) {
int subsetCount = Math.min(count[wire[0]], count[wire[1]]);
answer = Math.min(answer, Math.abs(subsetCount - (n - subsetCount)));
}
return answer;
}
private void initAdjacentMatrix(boolean[][] adjacentMatrix, int[][] wires) {
for (int[] wire : wires) {
adjacentMatrix[wire[0]][wire[1]] = true;
adjacentMatrix[wire[1]][wire[0]] = true;
}
}
private int dfs(int n, int node, int[] count, boolean[] visited, boolean[][] adjacentMatrix) {
visited[node] = true;
int childCount = 0;
for (int i = 1; i <= n; i++) {
if (adjacentMatrix[node][i] && !visited[i]) {
childCount += dfs(n, i, count, visited, adjacentMatrix);
}
}
return count[node] = childCount + 1;
}
}
'프로그래머스' 카테고리의 다른 글
[level 2] 피로도 - 87946 (0) | 2024.02.29 |
---|---|
[level 2] n^2 배열 자르기 - 87390 (0) | 2024.02.29 |
[level 2] 모음 사전 - 84512 (1) | 2024.02.29 |
[level 2] 2개 이하로 다른 비트 - 77885 (0) | 2024.02.29 |
[level 2] 행렬 테두리 회전하기 - 77485 (0) | 2024.02.29 |