728x90
반응형
https://www.acmicpc.net/problem/2668
2668번: 숫자고르기
세로 두 줄, 가로로 N개의 칸으로 이루어진 표가 있다. 첫째 줄의 각 칸에는 정수 1, 2, …, N이 차례대로 들어 있고 둘째 줄의 각 칸에는 1이상 N이하인 정수가 들어 있다. 첫째 줄에서 숫자를 적절
www.acmicpc.net
문제 해결
- 사이클을 만들어서 사이클에 속해 있는 원소를 모두 가져올 수 있는지 확인하는 문제
- 사이클에 들어가는지 확인은 bfs, dfs 모두 가능하다.(하지만 문제에서 dfs를 원하는것 같다.)
- 이전에 풀어봤던 문제와 비슷하다.(무슨 문제였는지는 까먹어서...ㅜㅜ)
CODE
def cycle(num):
global visited, c,result
c.append(num)
nx = graph[num]
if not visited[nx]:
visited[nx] = True
cycle(nx)
else:
if nx in c:
first = c.index(nx)
for s in c[first:]:
result.append(s)
if __name__=='__main__':
n = int(input())
graph = [0]*(n+1)
for i in range(1,n+1):
graph[i] = int(input())
result = []
visited = [False]*(n+1)
for i in range(1,n+1):
if visited[i] == False:
c = []
visited[i] = True
cycle(i)
result.sort()
print(len(result))
for ans in result:
print(ans)
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 2457 공주님의 정원 (0) | 2023.04.08 |
---|---|
[python] 백준 2170 선 긋기 (0) | 2023.04.08 |
[python] 백준 2885 초콜릿 식사 (0) | 2023.04.07 |
[python] 백준 20437 문자열 게임 2 (0) | 2023.04.07 |
[python] 백준 2138 전구와 스위치 (0) | 2023.04.06 |
댓글