๊ธฐ๋ก๋ฐฉ

BOJ_1167 : ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_1167 : ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„

Soom_1n 2023. 6. 25. 21:27

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

1167๋ฒˆ: ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„

ํŠธ๋ฆฌ๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋จผ์ € ์ฒซ ๋ฒˆ์งธ ์ค„์—์„œ๋Š” ํŠธ๋ฆฌ์˜ ์ •์ ์˜ ๊ฐœ์ˆ˜ V๊ฐ€ ์ฃผ์–ด์ง€๊ณ  (2 ≤ V ≤ 100,000)๋‘˜์งธ ์ค„๋ถ€ํ„ฐ V๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๊ฐ„์„ ์˜ ์ •๋ณด๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฃผ์–ด์ง„๋‹ค. ์ •์  ๋ฒˆํ˜ธ๋Š” 1๋ถ€ํ„ฐ V๊นŒ์ง€

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ๋…ธ๋“œ ์‚ฌ์ด ๊ฑฐ๋ฆฌ(๊ฐ€์ค‘์น˜)๊ฐ€ ์žˆ๋Š” ํŠธ๋ฆฌ์—์„œ ๊ฐ€์žฅ ๋จผ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•œ๋‹ค.
    • ์–ด๋Š ๋ถ€๋ถ„ ๊ฐ€์ค‘์น˜๊ฐ€ ํฐ ๊ฐ’์ด๋“  ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„ ์–‘ ๋์€ ๋ฆฌํ”„ ๋…ธ๋“œ์ผ ๊ฒƒ์ด๋‹ค. (ํฐ ๊ฐ€์ค‘์น˜ ๋ถ€๋ถ„์„ ๋ฐ˜๋“œ์‹œ ์ง€๋‚จ)
    • ํŠธ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๋…ธ๋“œ ์‚ฌ์ด์˜ ๊ฒฝ๋กœ๋Š” ํ•˜๋‚˜๋กœ ์œ ์ผํ•˜๋‹ค.
    • ํ•œ ๋…ธ๋“œ์—์„œ ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ๋ฅผ ๊ตฌํ•˜๋ฉด, ๊ทธ ๋…ธ๋“œ๊ฐ€ ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„ ์–‘ ๋ ๋ฆฌํ”„ ๋…ธ๋“œ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.
  • DFS ๋‘ ๋ฒˆ์œผ๋กœ ํ’€์ดํ•  ์ˆ˜ ์žˆ๋‹ค.
    • DFS 1 : ์•„๋ฌด ๋…ธ๋“œ์—์„œ ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ๋ฅผ ๊ตฌํ•œ๋‹ค.
    • DFS 2 : ๊ตฌํ•œ ๋…ธ๋“œ์—์„œ ๋‹ค์‹œ ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ๋ฅผ ๊ตฌํ•˜๋ฉด, ๊ทธ ๊ฑฐ๋ฆฌ๊ฐ€ ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์ด๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

import java.io.*;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Main {
    private static class Edge {
        int node, weight;

        public Edge(int node, int weight) {
            this.node = node;
            this.weight = weight;
        }
    }

    private static ArrayList<Edge>[] nodeList;
    private static boolean[] visited;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = null;

        int V = Integer.parseInt(br.readLine());

        nodeList = new ArrayList[V + 1];

        for (int i = 1; i <= V; i++) {
            nodeList[i] = new ArrayList<>();
        }

        for (int i = 0; i < V; i++) {
            st = new StringTokenizer(br.readLine());
            int node_number = Integer.parseInt(st.nextToken());

            while (true) {
                int node = Integer.parseInt(st.nextToken());
                if (node == -1) break;
                int weight = Integer.parseInt(st.nextToken());
                nodeList[node_number].add(new Edge(node, weight));
            }
        }

        visited = new boolean[V + 1];
        Edge start_point = dfs(1, 0);

        visited = new boolean[V + 1];
        Edge end_point = dfs(start_point.node, 0);

        bw.write(Integer.toString(end_point.weight));
        bw.flush();
    }

    private static Edge dfs(int now, int weight) {
        visited[now] = true;

        int max = 0;
        Edge temp = null;
        Edge result = new Edge(now, weight);

        for (Edge next : nodeList[now]) {
            if (!visited[next.node]) {
                temp = dfs(next.node, next.weight + weight);
                if (temp.weight > max) {
                    max = temp.weight;
                    result = temp;
                }
            }
        }
        return result;
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ๋ฉค๋ฒ„ ํด๋ž˜์Šค/๋ณ€์ˆ˜ ์„ ์–ธ
    • ๋…ธ๋“œ ๋ฒˆํ˜ธ์™€ ๊ฐ€์ค‘์น˜๋ฅผ ์ €์žฅํ•  ๊ฐ„์„  ํด๋ž˜์Šค Edge๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ–ˆ๋‹ค.
    • ๋…ธ๋“œ๋ณ„ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ArrayList ๋ฐฐ์—ด nodeList๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.
    • DFS์—์„œ ๋ฐฉ๋ฌธ์ฒดํฌ๋ฅผ ์œ„ํ•œ boolean ๋ฐฐ์—ด visited๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.
  • ๋…ธ๋“œ ๊ฐ„ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ nodeList์— ์ž…๋ ฅ๋ฐ›์•˜๋‹ค.
  • dfs ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด DFS๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ , ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ์™€ ๊ทธ ๊ฐ€์ค‘์น˜๋ฅผ Edge ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ํ–ˆ๋‹ค.
    • ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ์ฒดํฌํ•œ๋‹ค.
    • ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ DFS๋กœ ํƒ์ƒ‰ ํ›„ ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ์™€ ๊ทธ ๊ฐ€์ค‘์น˜๋ฅผ result์— ๋‹ด๋Š”๋‹ค.
    • ๋งŒ์•ฝ ๋ฆฌํ”„๋…ธ๋“œ๋ผ๋ฉด(๋ฐฉ๋ฌธํ•  ์ธ์ ‘ ๋…ธ๋“œ๊ฐ€ ์—†๋‹ค๋ฉด), ํ˜„์žฌ ๋…ธ๋“œ์™€ ๊ฐ€์ค‘์น˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

๋ฌธ์ œ์˜ ๋ถ„์„๊ณผ ํ’€์ด๋ฅผ ์ ์–ด๊ฐ€๋ฉฐ ์ง„ํ–‰ํ–ˆ๋‹ค.

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

  • ์งˆ๋ฌธ๊ณผ ํฌ์ŠคํŒ…์„ ํ™•์ธํ•ด ํ’€์ด ๋ฐฉ๋ฒ•์„ ํ™•์ธํ•ด๋ณด๋‹ˆ ์ƒ๊ฐ๋ณด๋‹ค ๊ฐ„๋‹จํ•œ DFS 2๋ฒˆ์œผ๋กœ ํ’€์ด๊ฐ€ ๊ฐ€๋Šฅํ–ˆ๋‹ค.
    • ์ด๋Ÿฐ ํ’€์ด๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ง๊ด€์ ์ธ ๋ฐฉ๋ฒ•์€ ์งˆ๋ฌธ ๊ฒŒ์‹œํŒ์—์„œ ์ข‹์€ ์˜ˆ์‹œ๋ฅผ ์ฐพ์•˜๋‹ค. (์งˆ๋ฌธ ๊ฒŒ์‹œํŒ ํžŒํŠธ ๊ธ€)
      • ๋…ธ๋“œ๋ฅผ ๊ตฌ์Šฌ, ๊ฐ„์„ ์„ ์‹ค๋กœ ๋น„์œ ํ•ด์„œ ์–ด๋Š ํ•œ ๊ตฌ์Šฌ์„ ์žก๊ณ  ๋Š˜์–ด๋œจ๋ฆฌ๋ฉด ๊ฐ€์žฅ ๋จผ ๊ตฌ์Šฌ์ด ๋‚˜ํƒ€๋‚œ๋‹ค.
      • ๊ทธ ๊ตฌ์Šฌ์„ ์žก๊ณ  ๋‹ค์‹œ ํ•œ ๋ฒˆ ๋Š˜์–ด๋œจ๋ฆฌ๋ฉด ๊ฐ€์žฅ ๋จผ ๊ตฌ์Šฌ ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์ด ๋œ๋‹ค.
    • ๋‹ค๋ฅธ ์ •๋ฆฌ๋กœ ํฌ์ŠคํŒ… ๊ธ€์„ ๋ณด์•˜๋‹ค. (ํ’€์ด ํฌ์ŠคํŒ…)
      • ๋ฌธ์ œ์— ์ฃผ์–ด์ง„ ์˜ˆ์‹œ๋กœ ์„ค๋ช…ํ•ด์ฃผ์…จ๋Š”๋ฐ, ๊ฐ ๋…ธ๋“œ ๋ณ„ ์ตœ์žฅ๊ฑฐ๋ฆฌ์˜ ๋…ธ๋“œ๋ฅผ ์ ์–ด๋ณด๋‹ˆ ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์˜ ๋…ธ๋“œ๋“ค์ด์—ˆ๋‹ค.
      • ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์ด ๋˜๋Š”๋ฐ ๊ฒฐ์ •์ ์ธ ์—ญํ• ์„ ํ•˜๋Š” ๊ฐ€์ค‘์น˜๋ฅผ ์ง€๋ฆ„ ๋…ธ๋“œ๋“ค์€ ๋ฐ˜๋“œ์‹œ ์ง€๋‚˜๊ณ , ๊ฐ ๋…ธ๋“œ์—์„œ ์ตœ์žฅ๊ฑฐ๋ฆฌ ๋…ธ๋“œ๋กœ ๊ฐˆ ๋•Œ๋„ ์ง€๋‚˜๋Š” ๊ฒƒ์ด๋‹ค. (์™„๋ฒฝํ•œ ์„ค๋ช…์€ ์•„๋‹ˆ๋‹ค)
      • ์•„๋ฌดํŠผ ์ž„์˜์˜ ๋…ธ๋“œ์—์„œ ์ตœ์žฅ๊ฑฐ๋ฆฌ ๋…ธ๋“œ๋ฅผ ๊ตฌํ•˜๊ณ , ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.
    • ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์— DFS๋ฅผ ์„ ํƒํ•˜๋Š” ์ด์œ ๋Š” ์ตœ์žฅ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์† ๋น„๊ตํ•˜๋ฉฐ ์ฐพ์•„์•ผํ•˜๋‹ˆ, ์žฌ๊ท€ ์† ๊ฐ„๋‹จํ•œ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์ด ํ•„์š”ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. BFS๋Š” ๋‹น์—ฐ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๋‚  ๊ฒƒ์ด๋‹ค.
    • ํŠธ๋ฆฌ์— ๋Œ€ํ•œ ๋…ํŠนํ•œ ํŠน์ง•์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋˜ ๋ฌธ์ œ์˜€๋‹ค.

728x90

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

BOJ_1504 : ํŠน์ •ํ•œ ์ตœ๋‹จ ๊ฒฝ๋กœ  (0) 2023.06.28
BOJ_1238 : ํŒŒํ‹ฐ  (0) 2023.06.27
BOJ_15663 : N๊ณผ M (9)  (0) 2023.06.11
BOJ_1043 : ๊ฑฐ์ง“๋ง  (0) 2023.06.09
BOJ_1149 : RGB๊ฑฐ๋ฆฌ  (0) 2023.06.08