본문 바로가기
CodingTest/Programmers

[Programmers] 전력망을 둘로 나누기

by 창브로 2025. 4. 19.

[문제 링크]

https://school.programmers.co.kr/learn/courses/30/lessons/86971

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

[풀이 과정]

간선 하나씩 지운 그래프를 매번 dfs를 돌려 가장 작은 절댓값이 나오도록 구현하였습니다.

 

[코드]

import java.util.*;

class Solution {
    ArrayList<Integer>[] graph;
    boolean[] visited;
    int min;
    
    public int solution(int n, int[][] wires) {
        graph = new ArrayList[n+1];
        min = Integer.MAX_VALUE;
        
        
        // graph 초기화
        for(int i = 1; i <= n; i++) {
            graph[i] = new ArrayList<>();
        }
        
        for(int i = 0; i < wires.length; i++) {
            // 시작 노드
            int s = wires[i][0];
        
            // 도착 노드
            int e = wires[i][1];
            
            // 양방향 노드기 때문에
            graph[s].add(e);
            graph[e].add(s);
        }
        
        for(int i = 0; i < wires.length; i++) {
            int s = wires[i][0];
            int e = wires[i][1];
            
            graph[s].remove(Integer.valueOf(e));
            graph[e].remove(Integer.valueOf(s));
            
            visited = new boolean[n+1];
        
            // 임의의 시작점 1
            int count = dfs(1);
            
            // dfs로 찾았던 연결 노드 수 - (전체 노드 - dfs로 찾았던 연결 노드 수)
            int diff = Math.abs(count - (n - count));
            
            min = Math.min(min, diff);
            
            graph[s].add(e);
            graph[e].add(s);
        }
        
        
        return min;
    }
    
    public int dfs(int node) {
        visited[node] = true;
        int c = 1;
        
        for(int g : graph[node]) {
            if(!visited[g]) {
                c += dfs(g);
            }
        }
        
        return c;
    }
}

[회고]

풀이 과정은 쉬웠지만 구현하는데 생각보다 많은 애를 먹었습니다.

 

 

 

 

질문과 피드백은 언제나 환영입니다.

감사합니다.

'CodingTest > Programmers' 카테고리의 다른 글

[Programmers] 타겟 넘버  (0) 2025.04.21
[Programmers] 모음사전  (0) 2025.04.21
[Programmers] 피로도  (1) 2025.04.15
[Programmers] 카펫  (0) 2025.04.15
[Programmers] 소수 찾기  (1) 2025.04.14