🔺 문제
9466번: 텀 프로젝트
이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을
www.acmicpc.net
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
import java.util.*;
import java.io.*;
public class Main {
static int[] arr;
static boolean[] visited, done; // 방문, 팀 편성 완료 배열
static int cnt;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
while(T --> 0) {
int N = Integer.parseInt(br.readLine());
arr = new int[N + 1];
visited = new boolean[N + 1];
done = new boolean[N + 1];
cnt = 0;
st = new StringTokenizer(br.readLine(), " ");
for(int i = 1 ; i <= N ; i++) {
int num = Integer.parseInt(st.nextToken());
arr[i] = num;
}
for(int i = 1 ; i <= N ; i++) {
if(!done[i]) {
dfs(i);
}
}
sb.append(N - cnt).append("\n");
}
System.out.println(sb);
}
private static void dfs(int num) {
if(visited[num]) { // 이미 방문한 경우
done[num] = true; // 팀 편성 완료 처리
cnt++; // 팀 편성 완료 인원 증가
}
else {
visited[num] = true;
}
// 다음 학생이 팀 결성을 아직 못 했을 경우
if(!done[arr[num]]) {
dfs(arr[num]);
}
visited[num] = false; // 학생 방문 체크 초기화
done[num] = true; // 모든 작업이 끝나서 더 이상 사용하지 않음 (사이클이 아닌 애들 위해 여기에 작성)
}
}
|
cs |
✅ 해결 아이디어
✔ DFS
- 사이클을 만들지 못 하는 노드 개수 찾기
🧩 필요한 자료구조
- visited[] : 방문 여부 체크용 배열 배열
- done[] : 팀 완성 배열
💥 유의사항
• 모든 점에 대해 DFS 수행 시, 시간 복잡도가 O(n^2)이 되어 시간 초과
💬 느낀 점
유니온파인드로도 풀 수 있지 않을까? 생각했는데
이미 그렇게 풀어본 분이 계시고, 시간초과가 발생한다고 한다. (참고)
복습을 잘해야겄다,,,
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
✔ 친절한 해설과 주석.. 감사합니다...
백준 9466번. 텀 프로젝트 (Java)
문제 링크 : https://www.acmicpc.net/problem/9466 싸이클을 형성하지 못하는 노드 갯수를 찾는 문제입니다. 일반적인 DFS로 모든 노드를 탐색하면 시간 초과가 납니다. 테스트케이스가 2 3 4 5 1 이렇게 주어
bcp0109.tistory.com
백준 9466번 : 텀 프로젝트 (JAVA) 문제 풀이
https://www.acmicpc.net/problem/9466 9466번: 텀 프로젝트 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이
iseunghan.tistory.com
[BOJ] 백준 9466번 텀 프로젝트 (Java)
#9466 텀 프로젝트 난이도 : 골드 4 유형 : DP 9466번: 텀 프로젝트 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모
loosie.tistory.com
- 복습용
[백준] 9466번 텀 프로젝트 (JAVA)
9466번: 텀 프로젝트 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와
yeeybook.tistory.com
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 11000번: 강의실 배정 (0) | 2023.09.04 |
---|---|
[백준/JAVA] 2847번: 게임을 만든 동준이 (0) | 2023.09.04 |
[백준/JAVA] 1261번: 알고스팟 (0) | 2023.09.01 |
[백준/JAVA] 14225번: 부분수열의 합 (0) | 2023.09.01 |
[백준/JAVA] 1339번: 단어 수학 (0) | 2023.08.31 |