백준 9466번 텀 프로젝트 Java

: ) YOUNG·2025년 2월 5일
1

알고리즘

목록 보기
445/458
post-thumbnail

백준 9466번 텀 프로젝트 Java

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

문제



생각하기


  • 방향 그래프 사이클 찾기

  • DFS



동작





결과


코드



import java.io.*;
import java.util.StringTokenizer;

public class Main {

    // input
    private static BufferedReader br;

    // variables
    private static final int MAX = 100_001;
    private static int N, ret;
    private static boolean[] isVisited, finished;
    private static int[] arr = new int[MAX];

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

        int t = Integer.parseInt(br.readLine());
        while (t-- > 0) {
            input();

            bw.write(solve());
        }

        bw.close();
    } // End of main()

    private static String solve() {
        StringBuilder sb = new StringBuilder();

        isVisited = new boolean[N + 1];
        finished = new boolean[N + 1];
        ret = 0;

        // 팀에 속하지 못한 학생의 수를 출력하기
        for (int i = 1; i <= N; i++) {
            if (isVisited[i]) continue;
            DFS(i);
        }
        
        sb.append(N - ret).append('\n');
        return sb.toString();
    } // End of solve()

    private static void DFS(int node) {
        isVisited[node] = true;
        int next = arr[node];

        if (!isVisited[next]) {
            DFS(next);
        } else if (!finished[next]) {
            int count = 1;
            for (int i = next; i != node; i = arr[i]) {
                count++;
            }
            ret += count;
        }

        finished[node] = true;
    } // End of DFS()

    private static void input() throws IOException {
        N = Integer.parseInt(br.readLine());

        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            arr[i + 1] = Integer.parseInt(st.nextToken());
        }
    } // End of input()
} // End of Main class

0개의 댓글

관련 채용 정보