본문 바로가기
백준/골드

숫자고르기 - Python

by 아찌방 2025. 1. 22.

 

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

 

 

 

 

 

코드

 

def solution(N, graph):
    visited = [False] * (N + 1)
    result = []

    def dfs(start):
        stack, path = [start], []
        while stack:
            node = stack.pop()
            if visited[node]: # 싸이클 발견
                if node in path:
                    idx = path.index(node)
                    result.extend(path[idx:])
                return
            visited[node] = True
            path.append(node)
            stack.append(graph[node])
        return

    for i in range(1, N):
        if not visited[i]:
            dfs(i)

    result = sorted(set(result))
    print(len(result))
    for num in result:
        print(num)

    return
# 입력
N = int(input())
graph = [ 0 ]

for _ in range(N):
    graph.append(int(input()))
solution(N, graph)

 

 

풀이

 

사이클을 찾는 문제입니다.

 

저 같은 경우 DFS로 사이클을 찾아가면서

 

마지막에 정렬을 해줬습니다.

 

 

 

다음에 또 봐요

 

728x90