Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Max Array Sum
- 프로그래머스
- candies
- Algorithm
- 매칭점수
- Special String Again
- 백준
- DFS: Connected Cell in a Grid
- 머신러닝
- Roads and Libraries
- 격파르타 장점
- 야근지수
- 코딩테스트
- [sqld]자격증합격
- python
- 해커랭크
- hackerrank
- Common Child
- Recursion: Davis' Staircase
- 구슬탈출2
- 격파르타 후기
- 격파르타 합격후기
- 알고리즘
- 피보나치 함수
- 파이썬
- Interview Preparation Kit
- Reverse Shuffle Merge
- Find the nearest clone
- programmers
- BFS: Shortest Reach in a Graph
Archives
- Today
- Total
Archive
[BOJ] 10451. 순열 사이클 본문
풀이
-
DFS문제.
-
처음 시작노드 -> 방문안한노드를 방문 -> 방문한 노드를 마주치면 while문 밖으로
-
처음 시작노드 = 최종 도착노드일 경우(cycle) count 변수 +1해줌.
def solution(): n = int(input()) lst = [0] + list(map(int, input().split())) cnt = 0 visited = [False] * (n+1) for i in range(1, n+1): # 이미 방문한 노드 if visited[i] == True: continue # 방문 정보 업데이트 visited[i] = True # 배열 복사 check_visited = visited[::] # 최초 시작노드, 도착노드 지정 start_point = i end_point = lst[i] # 방문하지 않은 노드인지 확인 while check_visited[end_point] == False: check_visited[end_point] = True # 도착지점 update end_point = lst[end_point] # 노드를 재방문할경우 while문 탈출 # visited 배열 업데이트 visited = check_visited # 마지막 방문노드와 첫번째 시작 노드와 같을 경우(cycle)에만 +1을 더해줌 cnt = cnt + 1 if end_point == start_point else cnt return cnt for _ in range(M): print(solution())
'공부 > Algorithm' 카테고리의 다른 글
[BOJ] 13460번. 구슬탈출2 (0) | 2021.02.21 |
---|---|
[BOJ] 1003. 피보나치 함수 (0) | 2021.02.14 |
[BOJ] 2178. 미로탐색 (0) | 2021.02.07 |
[BOJ] 1303. 전쟁-전투 (0) | 2021.02.07 |
[BOJ] 1697 숨바꼭질 (0) | 2021.01.31 |
Comments