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

[์•Œ๊ณ ๋ฆฌ์ฆ˜ PS] ๋ฐฑ์ค€ 10451๋ฒˆ ์ˆœ์—ด ์‚ฌ์ดํด ์ž๋ฐ” ๋ฌธ์ œํ’€์ด

by Wonit 2021. 2. 7.

๋ฌธ์ œ

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

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

ํ•ด๊ฒฐ๋ฒ•

์ด๋ฒˆ ๋ฌธ์ œ๋Š” ์ง€๋‚œ๋ฒˆ ํ’€์—ˆ๋˜ ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฌธ์ œ์™€ ๋งค์šฐ ์œ ์‚ฌํ•œ ๋ฌธ์ œ์ด๋‹ค.

 

๋ฌธ์ œ๊ฐ€ ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์€ ์ด๋ ‡๋‹ค.

 

์ˆœ์—ด์˜ ๊ธธ์ด๊ฐ€ ๋จผ์ € ์ฃผ์–ด์ง„๋‹ค.


๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ธธ์ด๋งŒํผ ์ˆœ์—ด์ด ๋“ค์–ด์˜ค๋Š”๋ฐ, ๊ทธ ์ˆœ์—ด์€ 1 ~ N ๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•œ ์ˆœ์—ด์˜ ์ธ๋ฑ์Šค์™€ 1:1 ๋งค์นญ๋˜์–ด ํ•ด๋‹น ๋งค์นญ ์ž์ฒต๊ฐ€ ๊ทธ๋ž˜ํ”„ ๋…ธ๋“œ์˜ ์—ฐ๊ฒฐ ์ƒํƒœ๋ผ๊ณ  ํ•œ๋‹ค.


๋ฌธ์ œ์˜ ํŠน์„ฑ์ƒ ์ˆ˜์—ด๋กœ ๋งŒ๋“  ๊ทธ๋ž˜ํ”„๋Š” ๋ฌด์กฐ๊ฑด ์‚ฌ์ดํด์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค.

 

๊ทธ๋Ÿผ ์ง€๋‚œ๋ฒˆ ํ’€์—ˆ๋˜ ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฌธ์ œ์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์˜ค๋‹ต ํ›„๋ณด

์ด ๋ฌธ์ œ๋Š” ๋ฐฉํ–ฅ์ด ์žˆ๋Š” ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์ด๋‹ค.

 

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์–‘๋ฐฉํ–ฅ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— graph.add๋ฅผ ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

์–‘๋ฐฉํ–ฅ(๋ฌด๋ฐฉํ–ฅ) ๊ทธ๋ž˜ํ”„ ์š”์†Œ ์ถ”๊ฐ€.

for (int i = 1; i <= n; i++) {
  graph.get(n1).add(n2);
  graph.get(n2).add(n1);
}

๋‹จ๋ฐฉํ–ฅ(๋ฐฉํ–ฅ) ๊ทธ๋ž˜ํ”„ ์š”์†Œ ์ถ”๊ฐ€.

for (int i = 1; i <= n; i++) {
  graph.get(n1).add(n2);
}

์ •๋‹ต ์ฝ”๋“œ

public class Main {

    static ArrayList<ArrayList<Integer>> graph;
    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));
        int t = Integer.parseInt(br.readLine());

        while(t-- > 0) {
            int n = Integer.parseInt(br.readLine());
            visited = new boolean[n + 1];
            graph = new ArrayList<>();
            for (int i = 0; i <= n; i++) {
                graph.add(new ArrayList<>());
            }

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

            for (int i = 1; i <= n; i++) {
                int number = Integer.parseInt(seq[i-1]);
                graph.get(i).add(number);
            }
            int answer = 0;
            for (int i = 1; i <= n; i++) {
                if(dfs(i)) answer++;
            }
            bw.write(answer + "\n");
            bw.flush();
        }
        bw.close();
    }

    private static boolean dfs(int x) {
        if(visited[x]) return false;
        visited[x] = true;
        for(int value: graph.get(x)) {
            if (!visited[value]) dfs(value);
        }
        return true;
    }
}

๋ฌธ์ œ ํšŒ๊ณ 

์ด๋ฒˆ ๋ฌธ์ œ๋Š” ์ง€๋‚œ DFS์™€ BFS์ฒ˜๋Ÿผ ์ถœ๋ ฅ ์ฒ˜๋ฆฌ๋ฅผ ์ œ๋Œ€๋กœ ํ•˜์ง€ ์•Š์•„์„œ 2๋ฒˆ์ด๋‚˜ ํ‹€๋ ธ๋˜ ๋ฌธ์ œ์ด๋‹ค.
์ €๋ฒˆ์— ๋ถ„๋ช… ์ถœ๋ ฅ ์ฒ˜๋ฆฌ ์ž˜ ํ•˜์ž๊ณ  ๋‹ค์ง ํ–ˆ๋Š”๋ฐ,, ๋ฉ์ฒญ์ธ๊ฐ€๋ณด๋‹ค.

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

๋Œ“๊ธ€