주어진 항공권을 모두 이용하여 여행경로를 짜려고 합니다. 항상 "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]