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

[์•Œ๊ณ ๋ฆฌ์ฆ˜-PS] ๋ฐฑ์ค€ 1325๋ฒˆ ํšจ์œจ์ ์ธ ํ•ดํ‚น ์ž๋ฐ” ๋ฌธ์ œํ’€์ด (์‹œ๊ฐ„ ์ดˆ๊ณผ ํ•ด๊ฒฐ)

by Wonit 2021. 7. 27.

๋ฌธ์ œ

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

 

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

 

๋ฌธ์ œ ์ ‘๊ทผ

 

์ด ๋ฌธ์ œ๋Š” ๊ฐ„๋‹จํ•œ dfs/bfs ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

์ด ์ž…๋ ฅ์ด 1๋งŒ๊ฐœ๊ฐ€ ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋“ค์–ด์˜ค๊ณ  ๊ฐ๊ฐ์˜ ๋…ธ๋“œ์˜ dfs ๊ฒฐ๊ณผ๋ฅผ ํƒ์ƒ‰ํ•ด์•ผ ํ•˜๋‹ˆ ์กฐ๊ธˆ ๊ฐ„๋‹น๊ฐ„๋‹นํ•˜๊ฒŒ ์‹œ๊ฐ„ ๋ณต์žก๋„์— ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ์ด ๋ฌธ์ œ๋Š” ์ผ๋ฐ˜์ ์ธ dfs๋กœ ํ•ด๊ฒฐํ•˜๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

ํ•ด๊ฒฐ๋ฒ•

 

์ด ๋ฌธ์ œ๋Š” ์žฌ๊ท€ dfs, ์Šคํƒ dfs ๋“ฑ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด์„œ ๊ตฌํ˜„์„ ํ•ด๋ณด์•˜์ง€๋ฏผ ๊ฒฐ๊ณผ๋ฅผ ์กฐ๊ธˆ ๋” ๋นจ๋ฆฌ ๋‚ผ ์ˆ˜ ์žˆ๋Š” bfs ๋กœ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

 

ํ•ดํ‚นํ•  ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ์˜ ์ˆ˜๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ static ํ•œ int ๋ฐฐ์—ด์— ๋…ธ๋“œ ๋ฒˆํ˜ธ๋ฅผ ์ธ๋ฑ์Šค๋กœ ํ•˜์—ฌ ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€์•ผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ •๋‹ต ์ฝ”๋“œ

public class Main {

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

    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[] fromTo = br.readLine().split(" ");
            int from = Integer.parseInt(fromTo[0]);
            int to = Integer.parseInt(fromTo[1]);

            graph.get(from).add(to);
        }
        result = new int[n + 1];

        for (int i = 1; i <= n; i++) {
            visited = new boolean[n + 1];
            getMaxPen(i);
        }

        int max = 0;

        for (int i = 1; i <= n; i++) {
            max = Math.max(max, result[i]);
        }

        for (int i = 1; i <= n; i++) {
            if(result[i] == max) {
                bw.write(i + " ");
            }
        }

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

    private static void getMaxPen(int x) {
        Queue<Integer> queue = new LinkedList<>();

        queue.add(x);
        visited[x] = true;

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


 

๋ฌธ์ œ ํšŒ๊ณ 

์ถœ๋ ฅ์„ ์ตœ์ ํ™” ํ•˜๊ธฐ ์œ„ํ•ด์„œ static ํ•œ ๋ณ€์ˆ˜๋ฅผ ์“ด๋‹ค๋Š” ์ฐจ์ด์— ๋ฌธ์ œ์˜ ac๊ฐ€ ๋‹ฌ๋ผ์กŒ๋‹ค๋Š” ์‚ฌ์‹ค์— ์กฐ๊ธˆ ์‹ ๊ธฐํ–ˆ๊ณ , ๋‹ค์Œ์—๋„ ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋‚˜์˜ค๋ฉด ์ถฉ๋ถ„ํžˆ ์จ๋ณผ๋งŒ ํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด์—ˆ๋‹ค.

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

๋Œ“๊ธ€