๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’ป Computer Science/- Data Structure, Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜ PS] ๋ฐฑ์ค€ 1389 ์ผ€๋นˆ ๋ฒ ์ด์ปจ์˜ 6๋‹จ๊ณ„ ๋ฒ•์น™ ์ž๋ฐ” ๋ฌธ์ œํ’€์ด

by Wonit 2021. 8. 2.

๋ฌธ์ œ

ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ๋ฐฑ์ค€์˜ 1389๋ฒˆ ์ผ€๋นˆ ๋ฒ ์ด์ปจ์˜ 6๋‹จ๊ณ„ ๋ฒ•์น™ ์˜ ์ ‘๊ทผ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค.
์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

1389๋ฒˆ: ์ผ€๋นˆ ๋ฒ ์ด์ปจ์˜ 6๋‹จ๊ณ„ ๋ฒ•์น™

์ฒซ์งธ ์ค„์— ์œ ์ €์˜ ์ˆ˜ N (2 ≤ N ≤ 100)๊ณผ ์นœ๊ตฌ ๊ด€๊ณ„์˜ ์ˆ˜ M (1 ≤ M ≤ 5,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์—๋Š” ์นœ๊ตฌ ๊ด€๊ณ„๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์นœ๊ตฌ ๊ด€๊ณ„๋Š” A์™€ B๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, A์™€ B๊ฐ€ ์นœ๊ตฌ๋ผ๋Š” ๋œป

www.acmicpc.net

 

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋จผ์ € ์ƒ๊ฐํ•ด๋ณด์ž.

 

๋ฌธ์ œ ์ ‘๊ทผ

 

์ด๋ฒˆ ๋ฌธ์ œ๋Š” ์–ด๋Š ํ•œ ๋…ธ๋“œ์—์„œ ๋ชจ๋“œ ๋…ธ๋“œ ๊นŒ์ง€ ๋ฐฉ๋ฌธํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์ตœ์†Œ ๋น„์šฉ์„ ๋ฌผ์–ด๋ณด๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

ํ•ด๊ฒฐ๋ฒ•

DFS ๋‚˜ BFS ๋ชจ๋‘๋ฅผ ์ด์šฉํ•ด์„œ ํ’€ ์ˆ˜ ์žˆ์ง€๋งŒ ๋‚˜๋Š” BFS ๋ฅผ ์ด์šฉํ•ด์„œ ํ’€์—ˆ๋‹ค.

 

์ฒ˜์Œ์—๋Š” ๋ฐฉ๋ฌธ ๋ฐฐ์—ด๊ณผ ๋…ธ๋“œ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ๋น„์šฉ์„ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด์—์„œ ๊ด€๋ฆฌํ–ˆ์ง€๋งŒ, ๋ชจ๋“  ๋ฐฉ๋ฌธ ๋…ธ๋“œ์˜ ์ด ํ•ฉ์„ ๊ตฌํ•  ๋•Œ ์ตœ์ดˆ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด 1์„ ๋”ํ•œ ๊ฒƒ์ด ๋ฌธ์ œ๋ฅผ ์ผ์œผ์ผฐ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฉ๋ฌธ ๋ฐฐ์—ด๊ณผ ๊นŠ์ด ๋ฐฐ์—ด์„ ๋”ฐ๋กœ ๋‚˜๋ˆ„์–ด์„œ ๊ด€๋ฆฌํ–ˆ๋‹ค.

 

์ •๋‹ต ์ฝ”๋“œ

public class Main {

    private static List<List<Integer>> graph = new ArrayList<>();
    private static boolean[] visited;
    private static int[] depth;

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

        String[] nm = br.readLine().split(" ");

        int n = Integer.parseInt(nm[0]);
        int m = Integer.parseInt(nm[1]);

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

        for (int i = 0; i < m; i++) {
            String[] s = br.readLine().split(" ");
            int from = Integer.parseInt(s[0]);
            int to = Integer.parseInt(s[1]);

            graph.get(from).add(to);
            graph.get(to).add(from);
        }

        int min = Integer.MAX_VALUE;
        int index = 0;

        for(int i = 1; i <= n; i++) {
            depth = new int[n + 1];
            visited = new boolean[n + 1];
            int kevinBaconNumber = getKevinBaconNumber(i);
            if(min > kevinBaconNumber) {
                min = kevinBaconNumber;
                index = i;
            }
        }

        bw.write(String.valueOf(index));

        bw.flush();
        bw.close();
    }

    private static int getKevinBaconNumber(int start) {
        Queue<Integer> queue = new LinkedList<>();
        queue.add(start);

        visited[start] = true;

        int sum = 0;

        while(!queue.isEmpty()) {
            int front = queue.remove();
            for(int value : graph.get(front)) {
                if(!visited[value]) {
                    visited[value] = true;
                    depth[value] = depth[front] + 1;
                    queue.add(value);
                }
            }
        }

        for (int i = 1; i < depth.length; i++) {
            sum += depth[i];
        }

        return sum;
    }
}

์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€