유형 : 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
복사했습니다!