
-Code
import java.util.*;
class Solution {
public int solution(int n, int[][] wires) {
int answer = Integer.MAX_VALUE;
// 노드 저장을 위한 리스트
ArrayList<ArrayList<Integer>> nodes = new ArrayList<>();
// 초기화
for (int i = 0; i <= n; i++) nodes.add(new ArrayList<>());
// 셋팅
for (int[] wire : wires) {
int u = wire[0];
int v = wire[1];
// 양방향 맵핑
nodes.get(u).add(v);
nodes.get(v).add(u);
}
// 연결을 하나씩 지우고 검사
for (int[] wire : wires) {
int u = wire[0];
int v = wire[1];
// visited
boolean[] visited = new boolean[n + 1];
// 현재 연결 끊기
nodes.get(u).remove((Integer) v);
nodes.get(v).remove((Integer) u);
// 갯수 구하기
int cnt = DFS(u, visited, nodes);
// 다시 연결
nodes.get(u).add(v);
nodes.get(v).add(u);
// 비슷한 갯수구하기
answer = Math.min(answer, Math.abs(n - cnt * 2));
}
return answer;
}
// dfs
private static int DFS(
int node,
boolean[] visited,
ArrayList<ArrayList<Integer>> nodes
) {
visited[node] = true;
// 총 연결 갯수를 얻기 위한 변수
int totalCount = 1;
for (int next : nodes.get(node)) {
if (!visited[next]) {
// 연결 갯수없으면 1을 반환하며 올라가 총 갯수 더해줌
totalCount += DFS(next, visited, nodes);
}
}
return totalCount;
}
}
완전 탐색이라 와이어의 연결을 하나씩 빼는 것은 알았지만 그걸 뭘로 구현하지 생각을 많이 했었습니다. ArrayList를 쓰기는 하는데 제거후 다시 넣는 방법을 안써봐서 몰랐는데 알고보니 remove라는 메소드가 있었고 추가로 Object로 입력을 안해주면 index에 위치하는 값이 삭제되어서 해당 부분을 Integer로 바꾸어 해결했습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 10844번 쉬운 계단 수 (0) | 2026.01.14 |
|---|---|
| [프로그래머스/Java] 의상 (0) | 2026.01.14 |
| [백준/Java] 35106번 릴레이 가위바위보 게임 (0) | 2026.01.14 |
| [백준/Java] 1912번 연속합 (0) | 2026.01.13 |
| [프로그래머스/Java] 모음사전 (0) | 2026.01.13 |