[BOJ][Java] 2533. ์‚ฌํšŒ๋ง ์„œ๋น„์Šค(SNS)

2025. 9. 24. 17:20ยท๐Ÿ’ญ Problem Solving/Java

๋ฌธ์ œ

https://www.acmicpc.net/problem/2533

 

๋ฌธ์ œ ์ดํ•ด

  • SNS ๋„คํŠธ์›Œํฌ๋Š” ํŠธ๋ฆฌ(์‚ฌ์ดํด ์—†์Œ) ๋กœ ์ฃผ์–ด์ง„๋‹ค.
  • ์–ด๋–ค ์‚ฌ๋žŒ์ด ์ •๋ณด๋ฅผ ์ „๋‹ฌ๋ฐ›์œผ๋ ค๋ฉด ๊ทธ ์‚ฌ๋žŒ์˜ ์ด์›ƒ ์ค‘ ์ ์–ด๋„ ํ•œ ๋ช…์€ ‘์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ’ ์—ฌ์•ผ ํ•œ๋‹ค.
  • ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ •๋ณด๋ฅผ ์ „๋‹ฌ๋ฐ›๋„๋ก ํ•  ๋•Œ, ํ•„์š”ํ•œ ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ์˜ ์ตœ์†Œ ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.

TIP: “๋ชจ๋“  ๊ฐ„์„ ๋งˆ๋‹ค ์–‘ ๋์  ์ค‘ ์ตœ์†Œ ํ•œ ์ชฝ์€ ์„ ํƒ๋˜์–ด์•ผ ํ•จ” ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค.

 

ํ’€์ด ์•„์ด๋””์–ด: ํŠธ๋ฆฌ DP

๋ฃจํŠธ๋ฅผ 1๋กœ ์žก๊ณ  DFS๋กœ ํŠธ๋ฆฌ๋ฅผ ๋‚ด๋ ค๊ฐ€๋ฉฐ ํƒ์ƒ‰ํ•œ๋‹ค.

 

์ƒํƒœ ์ •์˜

  • dp[0][node] : node๊ฐ€ ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ๊ฐ€ ์•„๋‹ ๋•Œ, node์˜ ์„œ๋ธŒํŠธ๋ฆฌ์—์„œ ํ•„์š”ํ•œ ์ตœ์†Œ ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ ์ˆ˜
  • dp[1][node] : node๊ฐ€ ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ์ผ ๋•Œ, node์˜ ์„œ๋ธŒํŠธ๋ฆฌ์—์„œ ํ•„์š”ํ•œ ์ตœ์†Œ ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ ์ˆ˜

 

์ ํ™”์‹

ํ˜„์žฌ ์ •์ ์„ cur, ์ž์‹ ์ •์ ์„ child๋ผ ํ•  ๋•Œ, ๋ชจ๋“  ๊ฐ„์„  (cur, child) ์—์„œ ์ตœ์†Œ ํ•œ ์ชฝ์€ ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ๋กœ ์„ ํƒ๋˜์–ด์•ผ ํ•œ๋‹ค.

  1. cur๊ฐ€ ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ
    → child๋Š” ๋ฐ˜๋“œ์‹œ ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ์—ฌ์•ผ ํ•œ๋‹ค.
dp[0][cur] = Σ dp[1][child]

(Σ : ๊ฐ ์ž์‹ ์„œ๋ธŒํŠธ๋ฆฌ์—์„œ ์–ป์€ dp๊ฐ’๋“ค์„ ๋”ํ•œ๋‹ค)

 

 

  1. cur๊ฐ€ ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ์ธ ๊ฒฝ์šฐ
    → ๊ฐ„์„  (cur, child)๋Š” ์ด๋ฏธ cur ์ชฝ์—์„œ ๋งŒ์กฑ. child๋Š” ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ์ผ ์ˆ˜๋„/์•„๋‹ ์ˆ˜๋„ ์žˆ๋‹ค. ๋” ์ž‘์€ ์ชฝ์„ ์„ ํƒํ•œ๋‹ค.
dp[1][cur] = 1 + Σ min(dp[0][child], dp[1][child])

์—ฌ๊ธฐ์„œ +1์€ cur ์ž์‹ ์ด ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ์ธ ๊ฒƒ์„ ํฌํ•จํ•œ๋‹ค.

 

DFS ํƒ์ƒ‰

  • dp[0][u] = 0, dp[1][u] = 1 ๋กœ ๋‘๊ณ  ์ž์‹๋“ค์„ ๋ฐ˜์˜ํ•ด ๋ˆ„์ ํ•œ๋‹ค. ์ •๋‹ต์€ min(dp[0][1], dp[1][1]) (๋ฃจํŠธ 1 ๊ธฐ์ค€)
  • ํŠธ๋ฆฌ์ด๋ฏ€๋กœ visited๋กœ ๋ถ€๋ชจ ์žฌ๋ฐฉ๋ฌธ์„ ๋ง‰์•„์ค€๋‹ค.

 

์ฝ”๋“œ

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

public class Main {
    static int n;
    static List<Integer>[] graph;
    static boolean[] visited;
    static int[][] dp;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        n = Integer.parseInt(br.readLine());
        visited = new boolean[n + 1];
        graph = new ArrayList[n + 1];
        dp = new int[2][n + 1]; // [0]: ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ X, [1]: ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ O

        for (int i = 0; i <= n; i++) {
            graph[i] = new ArrayList<>();
        }

        for (int i = 0; i < n - 1; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int u = Integer.parseInt(st.nextToken());
            int v = Integer.parseInt(st.nextToken());

            graph[u].add(v);
            graph[v].add(u);
        } // ์ž…๋ ฅ ๋

        dfs(1);

        System.out.println(Math.min(dp[0][1], dp[1][1]));
    }

    static void dfs(int cur) {
        visited[cur] = true;
        dp[0][cur] = 0;
        dp[1][cur] = 1;

        for (int child : graph[cur]) {
            if (visited[child])
                continue;

            dfs(child);
            dp[0][cur] += dp[1][child]; // ์ž์‹์ด ๋ฌด์กฐ๊ฑด ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ
            dp[1][cur] += Math.min(dp[0][child], dp[1][child]);
        }
    }
}

'๐Ÿ’ญ Problem Solving > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ][Java] 20056. ๋งˆ๋ฒ•์‚ฌ ์ƒ์–ด์™€ ํŒŒ์ด์–ด๋ณผ  (0) 2025.10.15
[BOJ][Java] 16236. ์•„๊ธฐ ์ƒ์–ด  (0) 2025.10.01
[BOJ][Java] 15486. ํ‡ด์‚ฌ 2  (0) 2025.09.15
[BOJ][Java] 16930. ๋‹ฌ๋ฆฌ๊ธฐ  (4) 2025.09.09
[BOJ][Java] 14503. ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ  (0) 2025.09.03
'๐Ÿ’ญ Problem Solving/Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [BOJ][Java] 20056. ๋งˆ๋ฒ•์‚ฌ ์ƒ์–ด์™€ ํŒŒ์ด์–ด๋ณผ
  • [BOJ][Java] 16236. ์•„๊ธฐ ์ƒ์–ด
  • [BOJ][Java] 15486. ํ‡ด์‚ฌ 2
  • [BOJ][Java] 16930. ๋‹ฌ๋ฆฌ๊ธฐ
0=2.
0=2.
  • 0=2.
    0=2
    0=2.
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (104)
      • ๐Ÿ“‚ Project (2)
        • Paint the City (2)
      • ๐Ÿ’ญ Problem Solving (42)
        • C++ (28)
        • Java (14)
      • ๐Ÿ“ Study (17)
        • React (1)
        • Java (16)
      • ๐Ÿ’ป CS (11)
        • ๋ฉด์ ‘์„ ์œ„ํ•œ CS ์ „๊ณต์ง€์‹ ๋…ธํŠธ (2)
        • ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ (9)
      • ๐Ÿƒ‍โ™€๏ธ Activities (32)
        • Web Front-End Basic Study (6)
        • 42 Cursus (26)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
    • ๊ธ€์“ฐ๊ธฐ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    dynamic programming
    ์‹œ๋ฎฌ๋ ˆ์ด์…˜
    BFS
    react
    makefile
    java
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    ํŠธ๋ฆฌ
    CSS
    ์ •๋ ฌ
    HTML
    ๋ฐฑํŠธ๋ž˜ํ‚น
    42๊ฒฝ์‚ฐ
    knapsack
    ๋ธŒ๋ฃจํŠธํฌ์Šค
    ๋งต
    CS
    dfs
    git
    unity
    ๊ตฌํ˜„
    VR
    La Piscine
    .h
    swea
    ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ
    github
    ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ๋ฐฑ์ค€
    C
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
0=2.
[BOJ][Java] 2533. ์‚ฌํšŒ๋ง ์„œ๋น„์Šค(SNS)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”