๋ฐฐ๋„ˆ ์ด๋ฏธ์ง€

๋ฐฑ์ค€ 1167: ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„(Java)

2025. 5. 26. 00:38ยท์•Œ๊ณ ๋ฆฌ์ฆ˜

๐Ÿ’ก ๋ฌธ์ œ ์š”์•ฝ

  • ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ๊ทธ๋ž˜ํ”„๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
  • ๊ฐ ๋…ธ๋“œ ๊ฐ„์˜ ๊ฑฐ๋ฆฌ๋Š” ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ์œผ๋ฉฐ, ์–‘๋ฐฉํ–ฅ์ด๋‹ค.
  • ์ด ํŠธ๋ฆฌ์—์„œ ๊ฐ€์žฅ ๋จผ ๋‘ ์ •์  ๊ฐ„์˜ ๊ฑฐ๋ฆฌ, ์ฆ‰ ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋…

  • ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„(Tree Diameter): ํŠธ๋ฆฌ์—์„œ ๊ฐ€์žฅ ๊ธด ๊ฒฝ๋กœ์˜ ๊ธธ์ด
  • ํŠธ๋ฆฌ์˜ ์„ฑ์งˆ์ƒ, ์ž„์˜์˜ ๋…ธ๋“œ์—์„œ ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ๋ฅผ ๋จผ์ € ์ฐพ๊ณ ,
    ๊ทธ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ๋‹ค์‹œ DFS๋ฅผ ๋Œ๋ ค ์ตœ๋Œ€ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋ฉด ๊ทธ๊ฒŒ ์ง€๋ฆ„์ด๋‹ค.

๐Ÿ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„

1. ์ž…๋ ฅ ํŒŒ์‹ฑ

  • ๊ฐ ์ •์  ๋ฒˆํ˜ธ์™€ ์—ฐ๊ฒฐ๋œ ์ •์  ๋ฒˆํ˜ธ ๋ฐ ๊ฑฐ๋ฆฌ๋ฅผ ์ž…๋ ฅ ๋ฐ›์Œ
  • ArrayList<Node>[] graph๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ๊ตฌ์„ฑ
    (Node๋Š” ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ๋ฒˆํ˜ธ์™€ ๊ฑฐ๋ฆฌ ์ •๋ณด๋ฅผ ํฌํ•จ)

2. ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„ ๊ตฌํ•˜๊ธฐ

1๏ธโƒฃ DFS 1์ฐจ

  • ์ž„์˜์˜ ๋…ธ๋“œ(์˜ˆ: 1๋ฒˆ)์—์„œ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ์ฐพ์Œ
  • ์ด ๋…ธ๋“œ๋ฅผ farthestNode ๋ณ€์ˆ˜์— ์ €์žฅ

2๏ธโƒฃ DFS 2์ฐจ

  • ์œ„์—์„œ ์ฐพ์€ farthestNode์—์„œ ๋‹ค์‹œ DFS ์ˆ˜ํ–‰
  • ์ตœ๋Œ€๋กœ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ๊ฑฐ๋ฆฌ(diameter)๋ฅผ ๊ตฌํ•จ โ†’ ์ด ๊ฐ’์ด ์ง€๋ฆ„

โœ… ์ „์ฒด ์ฝ”๋“œ (๊ฐ€๋…์„ฑ ํ–ฅ์ƒ + ๋ณ€์ˆ˜๋ช… ์ •๋ฆฌ)

import java.util.*;

public class Main {

    static List<Node>[] graph;
    static boolean[] visited;
    static int diameter = 0;
    static int farthestNode = 0;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        graph = new ArrayList[n + 1];
        for (int i = 1; i <= n; i++) graph[i] = new ArrayList<>();

        for (int i = 0; i < n; i++) {
            int from = sc.nextInt();
            while (true) {
                int to = sc.nextInt();
                if (to == -1) break;
                int cost = sc.nextInt();
                graph[from].add(new Node(to, cost));
            }
        }

        visited = new boolean[n + 1];
        dfs(1, 0);

        visited = new boolean[n + 1];
        dfs(farthestNode, 0);

        System.out.println(diameter);
    }

    static void dfs(int current, int dist) {
        if (dist > diameter) {
            diameter = dist;
            farthestNode = current;
        }

        visited[current] = true;

        for (Node neighbor : graph[current]) {
            if (!visited[neighbor.to]) {
                dfs(neighbor.to, dist + neighbor.cost);
            }
        }
    }

    static class Node {
        int to, cost;
        Node(int to, int cost) {
            this.to = to;
            this.cost = cost;
        }
    }
}

โœ… ์ „์ฒด ํ๋ฆ„ ์š”์•ฝ

1. ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ๊ตฌ์„ฑ
2. DFS(1) โ†’ ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ(farthestNode) ํƒ์ƒ‰
3. DFS(farthestNode) โ†’ ๊ทธ ๋…ธ๋“œ์—์„œ ๊ฐ€์žฅ ๋จผ ๊ฑฐ๋ฆฌ(diameter) ํƒ์ƒ‰
4. ์ถœ๋ ฅ diameter

๐Ÿ“ฆ ์‹œ๊ฐ„ ๋ณต์žก๋„ ๋ถ„์„

  • ์ •์  ๊ฐœ์ˆ˜ N (1 โ‰ค N โ‰ค 100,000)
  • ํŠธ๋ฆฌ๋Š” ๊ฐ„์„  ์ˆ˜๊ฐ€ N - 1
  • DFS๋Š” O(N)์œผ๋กœ ๋‘ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰๋จ โ†’ ์ „์ฒด ์‹œ๊ฐ„๋ณต์žก๋„ O(N)

๐Ÿ“Œ ์ •๋ฆฌ

๋ฐฉ์‹ ์„ค๋ช…
์ ‘๊ทผ๋ฒ• DFS ๋‘ ๋ฒˆ ์ˆ˜ํ–‰ (์ž„์˜๋…ธ๋“œ โ†’ ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ โ†’ ์ตœ๋Œ€ ๊ฑฐ๋ฆฌ)
์ž๋ฃŒ๊ตฌ์กฐ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ(List[]), ๋ฐฉ๋ฌธ ๋ฐฐ์—ด
ํ•ต์‹ฌ ๋กœ์ง DFS๋กœ ๊ฑฐ๋ฆฌ ๋ˆ„์ ํ•˜๋ฉฐ ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ ํƒ์ƒ‰

'์•Œ๊ณ ๋ฆฌ์ฆ˜' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋ฐฑ์ค€ 10800๋ฒˆ: ์ปฌ๋Ÿฌ๋ณผ (Java)  (1) 2025.06.04
๋ฐฑ์ค€ 2294: ๋™์ „2(Java)  (1) 2025.06.02
๋ฐฑ์ค€ 1976: ์—ฌํ–‰ ๊ณ„ํš(Java)  (0) 2025.05.24
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค PCCP๋ชจ์˜๊ณ ์‚ฌ#1 4๋ฒˆ๋ฌธ์ œ  (0) 2025.05.14
๋ฐฑ์ค€ 1043๋ฒˆ: ๊ฑฐ์ง“๋ง(java)  (1) 2025.05.07
'์•Œ๊ณ ๋ฆฌ์ฆ˜' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ๋ฐฑ์ค€ 10800๋ฒˆ: ์ปฌ๋Ÿฌ๋ณผ (Java)
  • ๋ฐฑ์ค€ 2294: ๋™์ „2(Java)
  • ๋ฐฑ์ค€ 1976: ์—ฌํ–‰ ๊ณ„ํš(Java)
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค PCCP๋ชจ์˜๊ณ ์‚ฌ#1 4๋ฒˆ๋ฌธ์ œ
quokkaST
quokkaST
  • quokkaST
    stquokka
    quokkaST
    • ๊ฐœ๋ฐœ์ž (77)
      • n8n (2)
      • CS๊ณต๋ถ€ (46)
        • Java & Spring (15)
        • ์ธํ”„๋ผ (7)
        • ์šด์˜์ฒด์ œ & ์‹œ์Šคํ…œ (9)
        • ๊ธฐํƒ€ CS์ง€์‹ (7)
        • ๋„คํŠธ์›Œํฌ (6)
        • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (2)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (16)
      • ํ”„๋กœ์ ํŠธ (8)
        • ๊ฐ์ •&๊ธˆ์œต์ฑ—๋ด‡ (8)
      • ๋ฆฌํŒฉํ† ๋ง (5)
        • horong (5)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
  • ๋งํฌ

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

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
์ƒ๋‹จ์œผ๋กœ

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