Java

[백준 9466] 텀 프로젝트 (JAVA)

iheeeee6-6 2023. 4. 3. 17:47
728x90

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

 

9466번: 텀 프로젝트

이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을

www.acmicpc.net

 

처음에 BFS로 접근하여 풀었다가 시간초과가 발생하여 DFS로 다시 풀게된 문제이다.

방문한 배열, 팀 구성 완료된 배열을 생성하여 포문을 돌면서 확인한다.

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.StringTokenizer;

public class Main {
	static Map<Integer, Integer> map;
	static int donePeople = 0;
	static int people;
	static boolean visited[], done[];

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int n = Integer.parseInt(br.readLine());
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < n; i++) {
			map = new HashMap<>();
			people = Integer.parseInt(br.readLine());
			visited = new boolean[people + 1];
			done = new boolean[people + 1];
			StringTokenizer st = new StringTokenizer(br.readLine());
			for (int j = 1; j < people + 1; j++) {
				map.put(j, Integer.parseInt(st.nextToken()));
			}

			donePeople = 0; //팀 구성된 인원

			for (int j = 1; j < people + 1; j++) {
				if (!done[j])
					check(j);
			}
			sb.append(people-donePeople+"\n");
			
		}
		bw.write(sb.toString());
		bw.flush();
		bw.close();
	}

	static void check(int idx) {
		if(done[idx]) return;
		if(visited[idx]) {
			donePeople++;
			done[idx]=true;
		}
		visited[idx]=true;
		check(map.get(idx));
		visited[idx]=false;
		done[idx]=true;
	}

}

 

'Java' 카테고리의 다른 글

[백준 15683] 감시 (JAVA)  (0) 2023.04.05
[백준 16235] 나무 재테크 (JAVA)  (0) 2023.04.05
[백준 1107] 리모컨 (JAVA)  (0) 2023.03.29
[백준 7569] 토마토 (JAVA)  (0) 2023.03.28
[백준 2636] 치즈 (JAVA)  (0) 2023.03.28