Computer Science/Algorithm

BOJ 2668: 숫자고르기 [Python 3]

무니화니 2023. 1. 25. 14:15

생각보다 너무 어려웠던 DFS 문제이다.

DFS알고리즘은 계속 배워도 쉽지않은 것 같다.

저번에 풀었던 https://www.acmicpc.net/problem/9466 

 

9466번: 텀 프로젝트

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

www.acmicpc.net

이 문제와 유사한 것 같다.

 

코드는 다음과 같다.

import sys
input=sys.stdin.readline
def dfs(v,i):
    visited[v]=True
    w=data[v]
    if not visited[w]:
        dfs(w,i)
    elif visited[w] and w==i:
        result.append(w)
n=int(input())
data=[0]+[int(input()) for _ in range(n)]
result=[]
for i in range(1,n+1):
    visited=[False]*(n+1)
    dfs(i,i)
print(len(result))
result.sort()
for i in result:
    print(i)

DFS 함수부터 보자. 

v는 현재 좌표, i는 시작한 좌표이다. 

좌표들을 돌면서, 만약 와본적이 없는 좌표이면, 와봤다고 체크하고 다음 행선지로 보내고,

만약 이미 도착했었던 좌표라면, 

이미 와본적이 있었는지 확인한다.

 

이를 모든 좌표마다 체크해주면서, 풀어준다. 

 

'Computer Science > Algorithm' 카테고리의 다른 글

BOJ 1967: 트리의 지름 [Python 3]  (0) 2023.01.27
BOJ 3020: 개똥벌레 [Python 3]  (0) 2023.01.25
BOJ 6986: 절사평균 [Python 3]  (0) 2023.01.25
BOJ 12865: 평범한 베낭 [Python 3]  (0) 2023.01.24
BOJ 9251: LCS [Python 3]  (0) 2023.01.24