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

[์•Œ๊ณ ๋ฆฌ์ฆ˜ PS] ๋ฐฑ์ค€ 11725๋ฒˆ ํŠธ๋ฆฌ์˜ ๋ถ€๋ชจ ์ฐพ๊ธฐ ์ž๋ฐ” ๋ฌธ์ œํ’€์ด

by Wonit 2021. 8. 2.

๋ฌธ์ œ

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

 

11725๋ฒˆ: ํŠธ๋ฆฌ์˜ ๋ถ€๋ชจ ์ฐพ๊ธฐ

๋ฃจํŠธ ์—†๋Š” ํŠธ๋ฆฌ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ, ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ๋ฅผ 1์ด๋ผ๊ณ  ์ •ํ–ˆ์„ ๋•Œ, ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

www.acmicpc.net

 

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

 

๋ฌธ์ œ ์ ‘๊ทผ

 

์ด๋ฒˆ ๋ฌธ์ œ๋Š” ์ฃผ์–ด์ง„ ์ž…๋ ฅ์˜ ์ˆœ์„œ๋Œ€๋กœ ์ž์‹๊ณผ ๋ถ€๋ชจ์˜ ๊ด€๊ณ„ ๋ผ๊ณ  ์ƒ๊ฐํ•ด์„œ ์กฐ๊ธˆ ์˜ค๋ž˜ ๊ฑธ๋ ธ๋˜ ๋ฌธ์ œ์ด๋‹ค.

 

๊ทธ๋ž˜์„œ ๋‚˜๋Š” Tree ์˜ ํŠน์„ฑ๊ณผ ๊ฐœ๋…์„ ์ด์šฉํ•ด์„œ Node ๋ฅผ ๋งŒ๋“ค์–ด ํ’€๋ ค๊ณ  ํ–ˆ์ง€๋งŒ, ๊ณ„์† ์•ˆ๋˜๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ํ’€์ด๋ฅผ ๋ณด๋‹ˆ DFS ๋ฅผ ์ด์šฉํ•ด์„œ ํ‘ธ๋Š”๊ฒŒ ์ •์„์ธ ๋ฐฉ๋ฒ• ๊ฐ™์•˜๋‹ค.

 

ํ•ด๊ฒฐ๋ฒ•

 

์šฐ์„  ํŠธ๋ฆฌ์˜ ์—ฐ๊ฒฐ ๊ด€๊ณ„์— ๋Œ€ํ•ด์„œ ์•Œ์ง€ ๋ชปํ•˜๋‹ˆ ์–‘๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ณ , ํ˜„์žฌ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ์—์„œ ๊ทธ ๋‹ค์Œ ๋…ธ๋“œ๋Š” ๋ฌด์กฐ๊ฑด ์ž์‹์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

์ด ํŠน์„ฑ์„ ์ด์šฉํ•ด์„œ dfs ๋ฅผ ๋Œ๋ฆฌ๋ฉด ๋œ๋‹ค.

 

์ •๋‹ต ์ฝ”๋“œ

public class Main {

    private static List<List<Integer>> tree = new ArrayList<>();
    private static int[] parent;

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

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

        parent = new int[n + 1];

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

        while(n-- > 1) {
            String[] s = br.readLine().split(" ");
            int from = Integer.parseInt(s[0]);
            int to = Integer.parseInt(s[1]);

            tree.get(from).add(to); // ์™œ ๋‹จ๋ฐฉํ–ฅ์ด ์•„๋‹๊นŒ?
            tree.get(to).add(from);
        }

        dfs(1);

        for (int i = 2; i < parent.length; i++) {
            bw.write(parent[i] + "\n");
        }
        bw.flush();
        bw.close();
    }

    private static void dfs(int start) {
        for(int value : tree.get(start)) {
            if(parent[value] == 0) {
                parent[value] = start;
                dfs(value);
            }
        }
    }
}

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

๋Œ“๊ธ€