Algorithm

[BOJ][๋ฐฑ์ค€][JAVA] 2668 - ์ˆซ์ž๊ณ ๋ฅด๊ธฐ

devYeON_ 2022. 1. 27. 21:58

๐Ÿ‘ฉ‍๐Ÿ’ป ๋ฌธ์ œ ํ’€๋Ÿฌ ๊ฐ€๊ธฐ

 

2668๋ฒˆ: ์ˆซ์ž๊ณ ๋ฅด๊ธฐ

์„ธ๋กœ ๋‘ ์ค„, ๊ฐ€๋กœ๋กœ N๊ฐœ์˜ ์นธ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ํ‘œ๊ฐ€ ์žˆ๋‹ค. ์ฒซ์งธ ์ค„์˜ ๊ฐ ์นธ์—๋Š” ์ •์ˆ˜ 1, 2, …, N์ด ์ฐจ๋ก€๋Œ€๋กœ ๋“ค์–ด ์žˆ๊ณ  ๋‘˜์งธ ์ค„์˜ ๊ฐ ์นธ์—๋Š” 1์ด์ƒ N์ดํ•˜์ธ ์ •์ˆ˜๊ฐ€ ๋“ค์–ด ์žˆ๋‹ค. ์ฒซ์งธ ์ค„์—์„œ ์ˆซ์ž๋ฅผ ์ ์ ˆ

www.acmicpc.net

๐Ÿ‘ฉ‍๐Ÿ’ป ๋ฌธ์ œ

์„ธ๋กœ ๋‘ ์ค„, ๊ฐ€๋กœ๋กœ N๊ฐœ์˜ ์นธ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ํ‘œ๊ฐ€ ์žˆ๋‹ค. ์ฒซ์งธ ์ค„์˜ ๊ฐ ์นธ์—๋Š” ์ •์ˆ˜ 1, 2, …, N์ด ์ฐจ๋ก€๋Œ€๋กœ ๋“ค์–ด ์žˆ๊ณ  ๋‘˜์งธ ์ค„์˜ ๊ฐ ์นธ์—๋Š” 1 ์ด์ƒ N์ดํ•˜์ธ ์ •์ˆ˜๊ฐ€ ๋“ค์–ด ์žˆ๋‹ค. ์ฒซ์งธ ์ค„์—์„œ ์ˆซ์ž๋ฅผ ์ ์ ˆํžˆ ๋ฝ‘์œผ๋ฉด, ๊ทธ ๋ฝ‘ํžŒ ์ •์ˆ˜๋“ค์ด ์ด๋ฃจ๋Š” ์ง‘ํ•ฉ๊ณผ, ๋ฝ‘ํžŒ ์ •์ˆ˜๋“ค์˜ ๋ฐ”๋กœ ๋ฐ‘์˜ ๋‘˜์งธ ์ค„์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๋“ค์ด ์ด๋ฃจ๋Š” ์ง‘ํ•ฉ์ด ์ผ์น˜ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œํ‚ค๋„๋ก ์ •์ˆ˜๋“ค์„ ๋ฝ‘๋˜, ์ตœ๋Œ€๋กœ ๋งŽ์ด ๋ฝ‘๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด, N=7์ธ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ํ‘œ๊ฐ€ ์ฃผ์–ด์กŒ๋‹ค๊ณ  ํ•˜์ž.

์ด ๊ฒฝ์šฐ์—๋Š” ์ฒซ์งธ ์ค„์—์„œ 1, 3, 5๋ฅผ ๋ฝ‘๋Š” ๊ฒƒ์ด ๋‹ต์ด๋‹ค. ์ฒซ์งธ ์ค„์˜ 1, 3, 5 ๋ฐ‘์—๋Š” ๊ฐ๊ฐ 3, 1, 5๊ฐ€ ์žˆ์œผ๋ฉฐ ๋‘ ์ง‘ํ•ฉ์€ ์ผ์น˜ํ•œ๋‹ค. ์ด๋•Œ ์ง‘ํ•ฉ์˜ ํฌ๊ธฐ๋Š” 3์ด๋‹ค. ๋งŒ์•ฝ ์ฒซ์งธ ์ค„์—์„œ 1๊ณผ 3์„ ๋ฝ‘์œผ๋ฉด, ์ด๋“ค ๋ฐ”๋กœ ๋ฐ‘์—๋Š” ์ •์ˆ˜ 3๊ณผ 1์ด ์žˆ์œผ๋ฏ€๋กœ ๋‘ ์ง‘ํ•ฉ์ด ์ผ์น˜ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์ด ๊ฒฝ์šฐ์— ๋ฝ‘ํžŒ ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜๋Š” ์ตœ๋Œ€๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋‹ต์ด ๋  ์ˆ˜ ์—†๋‹ค.

๐Ÿ‘ฉ‍๐Ÿ’ป ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

DFS๋ฅผ ๋Œ๋ฆฌ๋ฉด์„œ ์žฌ๊ท€๋กœ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•ด๊ฐ€๋ฉฐ visit๋ฅผ ์ฒดํฌํ•ด์ฃผ๋ฉด ๋˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, dfs(1,1)์„ ๋„ฃ๊ณ  ์‹œ์ž‘ํ•˜๋ฉด ์œ„์˜ ์˜ˆ์‹œ๋กœ (3,1) ์ด ํ™•์ธ๋˜๊ณ  3์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’์ด 1์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ (1,1)์ด ๋˜๋ฉด ๋™์  ๋ฐฐ์—ด์— ๊ฐ’์„ ๋‹ด๊ณ  ๋‹ค์Œ (2,2)๋กœ ๋„˜์–ด๊ฐ€๋ฉฐ ํ™•์ธํ•˜๋Š” ํ˜•์‹์ด๋‹ค.

๐Ÿ‘ฉ‍๐Ÿ’ป ์†Œ์Šค์ฝ”๋“œ

package BOJ.bfs_dfs;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class boj2668_์ˆซ์ž๊ณ ๋ฅด๊ธฐ {
    static int N;
    static int[] arr;
    static boolean[] visit;
    static ArrayList<Integer> result;

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());

        arr = new int[N + 1];
        visit = new boolean[N + 1];
        result = new ArrayList<>();

        for (int i = 1; i <= N; i++) {
            arr[i] = Integer.parseInt(br.readLine());
        }

        for (int j = 1; j <= N; j++) {
            visit[j] = true;
            dfs(j, j);
            visit[j] = false;
        }

        System.out.println(result.size());
        for (int i = 0; i < result.size(); i++) {
            System.out.println(result.get(i));
        }
    }

    static void dfs(int value, int i) {
        if (visit[arr[value]] == false) {
            visit[arr[value]] = true;
            dfs(arr[value], i);
            visit[arr[value]] = false;
        }
        if (arr[value] == i) {
            result.add(arr[value]);
        }
    }
}

๐Ÿ‘ฉ‍๐Ÿ’ป ๋ฆฌ๋ทฐ

๋‚ด ์ œ์ถœ


์กฐํ•ฉ ๋ฌธ์ œ๋ฅผ ๋งŽ์ด ํ’€๋‹ค ๋ณด๋‹ˆ ๋ณด์ž๋งˆ์ž ๊ฐ์žก๊ณ  ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค๐Ÿ˜‚๐Ÿ˜‚๐Ÿ˜‚