Publish:

ํƒœ๊ทธ: , , , , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

img_3.png

๋ฌธ์ œ

๋ฌธ์ œ ๋งํฌ

img_3.png

img_3.png

์„ค๋ช…

์ตœ์ดˆ ๊ทธ๋ž˜ํ”„ ๊ฐ„์„  ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง€๊ณ , ํ•ด๋‹น ๊ทธ๋ž˜ํ”„์—์„œ ๊ฐ„์„ ์„ ํ•˜๋‚˜์”ฉ ๋Š์—ˆ์„ ๋•Œ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง€๋Š” ๊ทธ๋ž˜ํ”„์˜ ๋…ธ๋“œ ์ˆ˜ ์ฐจ์ด๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜๋„๋ก ํ•˜๋Š” ๋ฌธ์ œ

ํ’€์ด

์œ„ ์˜ˆ์‹œ๋ฅผ ์ธ์ ‘ ํ–‰๋ ฌ ๊ทธ๋ž˜ํ”„๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

img_3.png

  1. graph ์„ ์–ธ : ์ •์ ๊ณผ ๊ฐ„์„  ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง€๋ฏ€๋กœ ํ•ด๋‹น ์ขŒํ‘œ๋ฅผ ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด int[][] ๋กœ graph ๋ฅผ ์„ ์–ธํ•ด์คฌ๋‹ค. boolean[][] ๋กœ ์„ ์–ธํ•ด๋„ ์ƒ๊ด€์—†๋‹ค.

  2. graph ์„ธํŒ… : ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ์„ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ทธ๋ž˜ํ”„ ์ดˆ๊ธฐ ์„ธํŒ…์„ ์ง„ํ–‰ํ•œ๋‹ค.
    1
    2
    
    graph[wire[0]][wire[1]] = 1;
    graph[wire[1]][wire[0]] = 1;
    
  3. ๊ฐ„์„  ๋Š๊ธฐ : ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ„์„ ์„ ํ•˜๋‚˜์”ฉ ๋Š์—ˆ์„ ๋•Œ์˜ ๋…ธ๋“œ ์ˆ˜๋ฅผ ์„ผ๋‹ค.
    1
    2
    3
    4
    5
    
    // ๊ฐ„์„ ์„ ๋Š๊ณ 
    graph[u][v] = 0;
    graph[v][u] = 0;
    // ๊ทธ ๊ทธ๋ž˜ํ”„๋ฅผ dfs ๋Œ๋ฆฐ๋‹ค. ๋ฌธ์ œ์—์„œ n ์€ ์ž์—ฐ์ˆ˜๋ผ๊ณ  ํ–ˆ์œผ๋ฏ€๋กœ graph ๋Š” 1๋ถ€ํ„ฐ ์„ธํŒ…๋˜์–ด ์žˆ๋‹ค.
    dfs(1, visited, graph);
    
  4. ๋…ธ๋“œ ์ˆ˜ ์ฐจ์ด๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ๊ฐ’ ์ฐพ๊ธฐ : dfs ์—์„œ ์ฐพ์€ ํ•œ ๊ทธ๋ž˜ํ”„์˜ ๋…ธ๋“œ ์ˆ˜๊ฐ€ count ๋ผ๋ฉด, ๋‚˜๋จธ์ง€ ๊ทธ๋ž˜ํ”„์˜ ๋…ธ๋“œ ์ˆ˜๋Š” n - count ๊ฐ€ ๋œ๋‹ค. ์ด ๋‘ ์ˆ˜์˜ ์ฐจ์ด๋ฅผ ๊ตฌํ•˜๊ณ  ๊ธฐ์กด์˜ ์ตœ์†Œ๊ฐ’ ๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ minDiff ๋ฅผ ๊ฐฑ์‹ ํ•ด ๋‚˜๊ฐ„๋‹ค.
  5. ๊ฐ„์„  ๋ณต๊ตฌ : ๋Š์—ˆ๋˜ ๊ฐ„์„ ์„ ๋‹ค์‹œ ์—ฐ๊ฒฐ์‹œ์ผœ ์ฃผ๊ณ , ๋‹ค์Œ wire ์— ๋Œ€ํ•ด ํƒ์ƒ‰ํ•œ๋‹ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
class Solution {
  static int[][] graph;
  static boolean[] visited;

  public int solution(int n, int[][] wires) {
    graph = new int[n + 1][n + 1];

    for (int[] wire : wires) {
      graph[wire[0]][wire[1]] = 1;
      graph[wire[1]][wire[0]] = 1;
    }

    int minDiff = Integer.MAX_VALUE;

    for (int[] wire : wires) {
      int u = wire[0];
      int v = wire[1];

      graph[u][v] = 0;
      graph[v][u] = 0;

      visited = new boolean[n + 1];
      int count1 = dfs(1, visited, graph);
      int count2 = n - count1;

      int diff = Math.abs(count1 - count2);
      minDiff = Math.min(minDiff, diff);

      graph[u][v] = 1;
      graph[v][u] = 1;
    }
    return minDiff;
  }

  private int dfs(int node, boolean[] visited, int[][] graph) {
    visited[node] = true;
    int count = 1;

    for (int i = 1; i < graph.length; i++) {
      if (!visited[i] && graph[node][i] == 1) {
        count += dfs(i, visited, graph);
      }
    }
    return count;
  }
}
๋ฐฉ๋ฌธํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋Œ“๊ธ€,์ง€์ ,ํ”ผ๋“œ๋ฐฑ ์–ธ์ œ๋‚˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค๐Ÿ˜Š

๐Ÿ˜€

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ