๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

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

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr


1. ๋ฌธ์ œ

ํŠธ๋ฆฌํ˜•ํƒœ๋กœ N๊ฐœ์˜ ์†ก์ „ํƒ‘์ด ์ฃผ์–ด์ง„๋‹ค. ์ด ์—ฐ๊ฒฐ๋œ ์ „์„ ๋“ค ์ค‘ ํ•˜๋‚˜๋ฅผ ๋Š์–ด์„œ ๋„คํŠธ์›Œํฌ๋ฅผ 2๊ฐœ๋กœ ๋ถ„ํ• ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

๋ถ„ํ• ๋œ ๋‘ ๋„คํŠธ์›Œํฌ๊ฐ€ ๊ฐ–๋Š” ์†ก์ „ํƒ‘์˜ ๊ฐœ์ˆ˜์˜ ์ฐจ์˜ ์ ˆ๋Œ“๊ฐ’์ด ์ตœ์†Œ๊ฐ€๋  ๋•Œ์˜ ์ ˆ๋Œ“๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค.

 

2. ํ’€์ด

bfs๋กœ ํ’€์—ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์ œํ•œ์‚ฌํ•ญ์„ ์ž˜ ์ฝ์–ด์•ผ ํ•œ๋‹ค. wires๋Š” ๊ธธ์ด๊ฐ€ n-1์ธ ์ •์ˆ˜ํ˜• 2์ฐจ์› ๋ฐฐ์—ด์ด๋‹ค.

 

์•„๋ž˜์™€ ๊ฐ™์€ ๋กœ์ง์œผ๋กœ ํ’€์—ˆ๋‹ค.

0. min์€ Integer.MAX_VALUE๋กœ ์ตœ๋Œ“๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

for๋ฌธ์„ ๋Œ๋ ค

1. ์—ฐ๊ฒฐ์„ ํ•˜๋‚˜์”ฉ ๋Š์€ ํ›„

2. 2๊ฐœ์˜ ๋„คํŠธ์›Œํฌ์—์„œ ๊ฐ๊ฐ bfs๋ฅผ ๋Œ๋ ค ๋…ธ๋“œ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.

3. ๋‘ ๊ฐœ์ˆ˜์˜ ์ฐจ์˜ ์ ˆ๋Œ“๊ฐ’๊ณผ min์„ ๋น„๊ตํ•ด min์„ ๊ฐฑ์‹ ํ•œ๋‹ค.

4. ๋Š์—ˆ๋˜ ์—ฐ๊ฒฐ์„ ๋‹ค์‹œ ์—ฐ๊ฒฐ์‹œํ‚จ๋‹ค.

 

3. ์ฝ”๋“œ

import java.io.*;
import java.util.*;

class Solution {
    
    static int min, N, matrix[][];
    
    public int solution(int n, int[][] wires) {
        N = n;
        matrix = new int[N+1][N+1];
        
        for (int i=0; i<N-1; i++) {
            matrix[wires[i][0]][wires[i][1]] = 1;
            matrix[wires[i][1]][wires[i][0]] = 1;
        }
        
        min = Integer.MAX_VALUE;
        for (int i=0; i<N-1; i++) {
            int s1 = wires[i][0];
            int s2 = wires[i][1];
            // ์—ฐ๊ฒฐ ๋Š์Œ
            matrix[s1][s2] = 0;
            matrix[s2][s1] = 0;
            
            int cnt1 = bfs(s1);
            int cnt2 = bfs(s2);
            min = Math.min(min, Math.abs(cnt1-cnt2));
            
            // ๋‹ค์‹œ ์—ฐ๊ฒฐ
            matrix[s1][s2] = 1;
            matrix[s2][s1] = 1;
        }
        return min;
    }
    
    static int bfs(int num){
        Queue<Integer> queue = new ArrayDeque<> ();
        boolean[] visited = new boolean[N+1];
        
        queue.offer(num);
        visited[num] = true;
        int cnt = 0;
        
        while (!queue.isEmpty()) {
            int now = queue.poll();
            for (int i=1; i<=N; i++) {
                if (now==i || matrix[now][i] == 0 || visited[i] == true) continue;
                queue.offer(i);
                visited[i] = true;
                cnt++;
            }
        }
        return cnt;
    }
}

 

4. ์‚ฌ๋‹ด

๊ทธ๋ž˜ํ”„ ๋ฌธ์ œ๋Š” ์žฌ๋ฐŒ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.