(Java) 프로그래머스 - 전력망을 둘로 나누기

2022. 7. 27. 02:21·코딩 테스트

그리 어렵지 않은 문제라고 느껴져서 금방 풀 줄 알았는데 

wires로 인접 행렬을 만드는 부분에서 조금 시간이 걸렸다.

 

1. 인접 행렬 만들기

2. 선 하나씩 끊으면서 bfs 탐색

으로 로직이 간단하다.

 


최종 코드

import java.util.LinkedList;
import java.util.Queue;
class Solution {
    static int[][] arr;
    public int solution(int n, int[][] wires) {
        int answer = Integer.MAX_VALUE;

        // 인접 행렬 만들기
        arr = new int[n + 1][n + 1];
        for (int i = 0; i < wires.length; i++) {
            arr[wires[i][0]][wires[i][1]] = 1;
            arr[wires[i][1]][wires[i][0]] = 1;
        }

        // 선 하나씩 끊으면서 bfs 탐색
        for (int i = 0; i < wires.length; i++) {
            int left = wires[i][0];
            int right = wires[i][1];

            // 선 끊기
            arr[left][right] = 0;
            arr[right][left] = 0;

            // bfs
            answer = Math.min(answer, bfs(left, n));

            // 끊었던 선 복구
            arr[left][right] = 1;
            arr[right][left] = 1;
        }

        return answer;
    }
    // bfs 메서드
    static int bfs(int left, int n) {
        int cnt = 1;
        boolean[] visited = new boolean[n + 1];
        Queue<Integer> queue = new LinkedList<>();
        queue.add(left);

        while (!queue.isEmpty()) {
            int temp = queue.poll();
            visited[temp] = true;
            for (int i = 1; i < n + 1; i++) {
                if (arr[temp][i] == 1 && !visited[i]) {
                    queue.add(i);
                    cnt++;
                }
            }
        }
        // cnt와 n - cnt는 각각 연결된 전력망
        return Math.abs(cnt - (n - cnt));
    }
}

'코딩 테스트' 카테고리의 다른 글

(Java) 백준 9935 - 문자열 폭발  (0) 2022.07.28
(Java) 백준 1991 - 트리 순회  (0) 2022.07.28
(Java) 프로그래머스 - 후보키  (0) 2022.07.26
(Java) 프로그래머스 - 모음사전  (0) 2022.07.22
(Java) 백준 14502 - 연구소  (0) 2022.07.22
'코딩 테스트' 카테고리의 다른 글
  • (Java) 백준 9935 - 문자열 폭발
  • (Java) 백준 1991 - 트리 순회
  • (Java) 프로그래머스 - 후보키
  • (Java) 프로그래머스 - 모음사전
로승리
로승리
  • 로승리
    Roy's Blog
    로승리
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Issuefy
      • Language
      • Spring
      • Database
      • Network
      • Kubernetes
      • AWS
      • 코드스쿼드
      • 코딩 테스트
      • 생각정리
      • 국비지원
      • 회고
      • 컨퍼런스, 세미나
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
로승리
(Java) 프로그래머스 - 전력망을 둘로 나누기
상단으로

티스토리툴바