주어진 항공권을 모두 이용하여 여행경로를 짜려고 합니다. 항상 "ICN" 공항에서 출발합니다.
항공권 정보가 담긴 2차원 배열 tickets가 매개변수로 주어질 때, 방문하는 공항 경로를 배열에 담아 return 하도록 solution 함수를 작성해주세요.
| tickets | return |
|---|---|
| [["ICN", "JFK"], ["HND", "IAD"], ["JFK", "HND"]] | ["ICN", "JFK", "HND", "IAD"] |
| [["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL","SFO"]] | ["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"] |
모든 티켓을 사용한 지역ICN# 코드
from collections import deque
def solution(tickets):
answer = []
routes = {} # 루트를 담을 딕셔너리
for start, end in tickets:
# start, end에 대해 초기화
# 'des' : 이동 가능한 공항
# 'count' : 이동 가능한 남은 공항의 수
if start not in routes:
routes[start] = {'des' : [], 'count' : 0}
if end not in routes:
routes[end] = {'des' : [], 'count' : 0}
# 루트 추가
routes[start]['des'].append(end)
routes[start]['count'] += 1
# 각 공항에 대해 'des'를 내림차순 정렬
# 이후 pop() 명령을 조금이라도 빠르게 실행하도록 하기 위함
for key in routes.keys():
routes[key]['des'].sort(reverse=True)
# 스택을 활용한 DFS
# 사전순으로 추가하며 더이상 추가할 수 없을 때
# 차례로 정답 경로에 추가(티켓이 더이상 없을 때)
stack = ["ICN"]
while stack:
start = stack[-1]
# 더이상 이동할 티켓이 없는 지역은 answer에 추가
if routes[start]['count'] == 0:
answer.append(stack.pop())
# 사전순으로 차례대로 stack에 추가
else:
stack.append(routes[start]['des'].pop())
routes[start]['count'] -= 1
return answer[::-1]
