[프로그래머스] 86971 전력망을 둘로 나누기 - JAVA - Lv2

2025. 5. 4. 20:55·알고리즘/문제풀이

[프로그래머스] 86971 전력망을 둘로 나누기 - JAVA - Lv2

문제

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

 

프로그래머스

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

programmers.co.kr

문제 분석

조건

  • 하나의 트리형 전력망이 있다 (노드 + 간선)
  • 전선을 하나 끊어서 두 개의 네트워크로 나눌 수 있는데 이때 두 네트워크의 노드 수 차이를 최소로 만들어 차이를 출력

풀이방법

  • 트리를 입력받은 후 간선마다 돌아가며 DFS를 수행하면 된다.
  • 하나의 트리로 연결되어있고, 전체 노드의 수를 알고 있으므로 간선의 두 노드 중 하나에서만 DFS를 돌리면 나머지 네트워크의 노드 수도 알 수 있다.

코드

import java.util.*;

class Solution {
    static List<Integer>[] tree;
    static boolean[] visited;

    public int solution(int n, int[][] wires) {
        int answer = 101;
        tree = new List[n + 1];
        for (int i = 1; i <= n; i++) {
            tree[i] = new ArrayList<>();
        }
        for (int[] wire : wires) {
            tree[wire[0]].add(wire[1]);
            tree[wire[1]].add(wire[0]);
        }
        visited = new boolean[n + 1];
        for (int[] wire : wires) {
            Arrays.fill(visited, false);
            visited[wire[0]] = true;
            visited[wire[1]] = true;
            answer = Math.min(Math.abs(dfs(wire[0]) * 2 - n), answer);
            if (answer == 0) {
                break;
            }
        }
        return answer;
    }

    private int dfs(int now) {
        int count = 1;
        for (Integer next : tree[now]) {
            if (visited[next]) {
                continue;
            }
            visited[next] = true;
            count += dfs(next);
        }
        return count;
    }
}
728x90
저작자표시 비영리 변경금지 (새창열림)
'알고리즘/문제풀이' 카테고리의 다른 글
  • [프로그래머스] 42892 길 찾기 게임 - JAVA
  • [프로그래머스] 11053 N개의 최소공배수 - JAVA
  • [백준/BOJ] 1240 노드사이의 거리 - JAVA
  • [백준/BOJ] 1149 RGB거리 - JAVA - 실버1
LIRI
LIRI
  • LIRI
    기록
    LIRI
  • 전체
    오늘
    어제
    • 분류 전체보기 (74)
      • 블로그 꾸미기 (0)
      • Spring (6)
      • 바이브코딩 (1)
      • React (3)
      • CS (0)
      • 알고리즘 (57)
        • 개념 (2)
        • 문제풀이 (54)
      • Java (1)
      • DB (1)
      • log (4)
        • SSAFY (3)
        • 궁금 (1)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 공지사항

  • 인기 글

  • 태그

    Java
    알고리즘
    그리디
    springboot
    Springsecurity
    LV2
    dfs
    프로그래머스
    Spring
    dp
    ssafy 합격 후기
    JWT
    SSAFY 9기
    BFS
    싸피
    알고리즘 문제풀이
    SSAFY
    비트마스킹
    LIS
    커서ai
    너비우선탐색
    BOJ
    백준
    바이브코딩
    Security
    lv3
    느좋코딩
    pccp모의고사
    리액트
    최장증가부분수열
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
LIRI
[프로그래머스] 86971 전력망을 둘로 나누기 - JAVA - Lv2
상단으로

티스토리툴바