728x90
반응형
https://www.acmicpc.net/problem/9466
9466번: 텀 프로젝트
이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을
www.acmicpc.net
문제 해결
- 하나씩 돌아가며 그 안에 사이클이 있는지 확인한다.
- 사이클을 돌면서 한 번 지나간 index는 두 번 지나갈 필요가 없다.(만약 한 번 돌았을 때 사이클이 안만들어 졌으면 안만들어지는 것이다.)
CODE
import sys
sys.setrecursionlimit(1000000)
def cycle(num):
global ans
visited[num] = True
c.append(num)
new_num = A[num]
if visited[new_num]:
if new_num in c:
ans += c[c.index(new_num):]
return
else:
cycle(new_num)
if __name__=='__main__':
for _ in range(int(input())):
n = int(input())
A = [0] + list(map(int, input().split()))
visited= [0 for _ in range(n+1)]
ans = []
for i in range(1,n+1):
if visited[i] == False:
c = []
cycle(i)
print(n-len(ans))
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 2583 영역 구하기 (0) | 2023.04.04 |
---|---|
[python] 백준 2636 치즈 (0) | 2023.04.04 |
[python] 백준 15711 환상의 짝궁 (0) | 2023.04.04 |
[python] 백준 1826 연료 채우기 (0) | 2023.04.04 |
[python] 백준 18428 감시 피하기 (0) | 2023.04.04 |
댓글