유형 : DFS
풀이 시간 : 인터넷 검색
경로 찾는 문제는 DFS가 훨씬 편한 것 같다는 생각..
DFS를 사용할지 BFS를 사용할지도 잘 판단해야 할 듯.
from collections import deque
def solution(tickets):
answer = []
visited = [False] * len(tickets)
#재귀를 이용한 DFS 시작
def dfs(curr, path):
#종료 조건 : PATH가 완성되었을 경우
if len(path) == len(tickets) + 1:
answer.append(path) #정답 후보 집합에 append
return
#다음 노드 탐색 (재귀)
for idx, ticket in enumerate(tickets):
if ticket[0] == curr and visited[idx] == False:
visited[idx] = True #우선 방문으로 설정
dfs(ticket[1], path + [ticket[1]]) #방문
visited[idx] = False #만약 유효하지 않은 경로인 경우 다시 탐색
dfs("ICN", ["ICN"])
answer.sort()
return answer[0]
1. visited :
- 한번 방문한 뒤 경로가 실패하면 어떻게 다시 티켓을 유효하게 만들 것인지
- 장소가 아니라 ticket에 visited를 적용
이런 점에서 "재귀" DFS를 사용한는 것이 가장 효율적이었다.
visited를 방문으로 표시한 후 방문해보고 적용이 안 되었을 경우 다시 방문을 안 한 것으로 표기하기가 간편하다.
'프로그래머스 > Lv. 3' 카테고리의 다른 글
5. 정수 삼각형 (DP) (0) | 2024.07.19 |
---|---|
3. 단어 변환 (BFS) (0) | 2024.07.19 |
2. 네트워크 (0) | 2024.07.19 |
1. 베스트앨범 (해시 테이블) ★ (이차원 함수의 정렬) (0) | 2024.07.17 |