๊ธฐ๋ก๋ฐฉ

BOJ_2644 : ์ดŒ์ˆ˜๊ณ„์‚ฐ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_2644 : ์ดŒ์ˆ˜๊ณ„์‚ฐ

Soom_1n 2023. 1. 26. 00:22

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

 

2644๋ฒˆ: ์ดŒ์ˆ˜๊ณ„์‚ฐ

์‚ฌ๋žŒ๋“ค์€ 1, 2, 3, …, n (1 ≤ n ≤ 100)์˜ ์—ฐ์†๋œ ๋ฒˆํ˜ธ๋กœ ๊ฐ๊ฐ ํ‘œ์‹œ๋œ๋‹ค. ์ž…๋ ฅ ํŒŒ์ผ์˜ ์ฒซ์งธ ์ค„์—๋Š” ์ „์ฒด ์‚ฌ๋žŒ์˜ ์ˆ˜ n์ด ์ฃผ์–ด์ง€๊ณ , ๋‘˜์งธ ์ค„์—๋Š” ์ดŒ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ์‚ฌ๋žŒ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด

www.acmicpc.net



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

  • ๋…ธ๋“œ ์ˆ˜ n, ์‹œ์ž‘ ๋…ธ๋“œ, ๋ ๋…ธ๋“œ, ๊ฐ„์„ ์˜ ์ˆ˜ m๊ณผ m๊ฐœ์˜ ๊ฐ„์„  ์ •๋ณด๊ฐ€ ์ž…๋ ฅ๋œ๋‹ค.
  • ์‹œ์ž‘ ๋…ธ๋“œ๋ถ€ํ„ฐ ๋ ๋…ธ๋“œ ๊นŒ์ง€ ๋ช‡ ๊ฐœ์˜ ๊ฐ„์„ ์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.
    • ์—ฐ๊ฒฐ๋˜์–ด์žˆ์ง€ ์•Š์œผ๋ฉด -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

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

import java.util.ArrayList;
import java.util.Scanner;
import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        ArrayList<Integer> arr[] = new ArrayList[n + 1];
        for (int i = 1; i <= n; i++) {
            arr[i] = new ArrayList<>();
        }

        int h1 = sc.nextInt();
        int h2 = sc.nextInt();
        int m = sc.nextInt();

        for (int i = 0; i < m; i++) {
            int x = sc.nextInt();
            int y = sc.nextInt();
            if (!arr[x].contains(y)) {
                arr[x].add(y);
                arr[y].add(x);
            }
        }
        System.out.println(bfs(arr, h1, h2));
    }

    private static int bfs(ArrayList<Integer>[] arr, int h1, int h2) {
        boolean[] visit = new boolean[arr.length + 1];
        Stack<Person> stack = new Stack<>();
        stack.push(new Person(h1, 0));

        while (!stack.isEmpty()) {
            Person p = stack.pop();
            if (!visit[p.idx]) {
                if (p.idx == h2) {
                    return p.count;
                }

                visit[p.idx] = true;
                for (int i = 0; i < arr[p.idx].size(); i++) {
                    stack.push(new Person(arr[p.idx].get(i), p.count + 1));
                }
            }
        }
        return -1;
    }

    private static class Person {
        int idx;
        int count;

        Person(int idx, int count) {
            this.idx = idx;
            this.count = count;
        }
    }
}

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

  • ๋…ธ๋“œ ์ •๋ณด์™€ ๊ฐ„์„  ์ •๋ณด๋ฅผ ์ž…๋ ฅ ๋ฐ›๊ณ  BFS๋กœ ํƒ์ƒ‰ํ•œ๋‹ค.
  • Person ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ์ธ๋ฑ์Šค์™€ ํ˜„์žฌ๊นŒ์ง€์˜ ๊ฐ„์„  ์ˆ˜๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • bfs๋ฉ”์„œ๋“œ์—์„œ ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    • ๋…ธ๋“œ ๋ฐฉ๋ฌธ์„ ํ™•์ธํ•  boolean ๋ฐฐ์—ด visit๊ณผ bfs๋ฅผ ์œ„ํ•œ Person ์Šคํƒ stack์„ ์„ ์–ธํ•œ๋‹ค.
    • ์‹œ์ž‘ ๋…ธ๋“œ์˜ ์ธ๋ฑ์Šค h1์„ ์Šคํƒ์˜ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ๋„ฃ๋Š”๋‹ค.
    • ์Šคํƒ์ด ๋นŒ ๋•Œ๊นŒ์ง€ ๊ณ„์‚ฐ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
      • ์Šคํƒ์—์„œ ๊ฐ’์„ pop
      • ๋ฐฉ๋ฌธํ•œ์ ์ด ์—†๋Š” ๋…ธ๋“œ๋ฉด, ๋ ๋…ธ๋“œ์ธ์ง€ ํ™•์ธ
      • ๋๋…ธ๋“œ๊ฐ€ ์•„๋‹ˆ๋ฉด visit์„ true๋กœ ๋ฐ”๊พธ๊ณ  ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ์‚ฝ์ž…

๐Ÿ”ธ end ๐Ÿ”ธ

  • dfs๋กœ ํ’€๋ ค๋‹ค๊ฐ€ bfs๊ฐ€ ๋” ๊น”๋”ํ•œ ๊ฒƒ ๊ฐ™์•„ ์ „ํ–ฅํ•˜์˜€๋‹ค.
  • dfs๋„ ์—ฐ์Šตํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ํ’€์–ด์•ผ๊ฒ ๋‹ค.

728x90