์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

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

KIMHYEYUN 2021. 11. 11. 20:39
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/2668

 

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์ด ์žˆ์œผ๋ฏ€๋กœ ๋‘ ์ง‘ํ•ฉ์ด ์ผ์น˜ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์ด ๊ฒฝ์šฐ์— ๋ฝ‘ํžŒ ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜๋Š” ์ตœ๋Œ€๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋‹ต์ด ๋  ์ˆ˜ ์—†๋‹ค.

์ž…๋ ฅ


์ฒซ์งธ ์ค„์—๋Š” N(1≤N≤100)์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ํ•˜๋‚˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ทธ ๋‹ค์Œ ์ค„๋ถ€ํ„ฐ๋Š” ํ‘œ์˜ ๋‘˜์งธ ์ค„์— ๋“ค์–ด๊ฐ€๋Š” ์ •์ˆ˜๋“ค์ด ์ˆœ์„œ๋Œ€๋กœ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ž…๋ ฅ๋œ๋‹ค.

 

์ถœ๋ ฅ


์ฒซ์งธ ์ค„์— ๋ฝ‘ํžŒ ์ •์ˆ˜๋“ค์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ๊ทธ ๋‹ค์Œ ์ค„๋ถ€ํ„ฐ๋Š” ๋ฝ‘ํžŒ ์ •์ˆ˜๋“ค์„ ์ž‘์€ ์ˆ˜๋ถ€ํ„ฐ ํฐ ์ˆ˜์˜ ์ˆœ์„œ๋กœ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•œ๋‹ค.

์ฝ”๋“œ


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main_BOJ_2668_์ˆซ์ž๊ณ ๋ฅด๊ธฐ {
    static int N;
    static int[] nums;
    static boolean[] isVisited;
    static List<Integer> ans;
    
    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        N = Integer.parseInt(br.readLine());
        nums = new int[N+1];
        isVisited = new boolean[N+1];
        ans = new ArrayList<>();

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

        for(int i = 1; i < N+1 ; i++){
            isVisited[i] = true;
            DFS(i, i);
            isVisited[i] = false;
        }

        Collections.sort(ans);
        System.out.println(ans.size());
        for(int a : ans)
            System.out.println(a);
    }

    private static void DFS(int n, int cycleEnd) {
        if(nums[n] == cycleEnd) ans.add(n);

        if(!isVisited[nums[n]]){
            isVisited[nums[n]] = true;
            DFS(nums[n], cycleEnd);
            isVisited[nums[n]] = false;
        }
    }
    
}

 

728x90
๋ฐ˜์‘ํ˜•