주어진 항공권을 모두 이용하여 여행경로를 짜려고 합니다. 항상 "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"] |
예제 #1
["ICN", "JFK", "HND", "IAD"] 순으로 방문할 수 있습니다.
예제 #2
["ICN", "SFO", "ATL", "ICN", "ATL", "SFO"] 순으로 방문할 수도 있지만 ["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"] 가 알파벳 순으로 앞섭니다.
from collections import defaultdict
def solution(tickets):
answer = []
# {시작점: [도착점1,도착점2]} 형태로 dict 생성
route = defaultdict(list)
for s,e in tickets:
route[s].append(e)
# 백트래킹 연산 횟수를 줄이기 위해 도착점 리스트를 내림차순으로 정렬(pop해서 뽑아냄)
for a in route.keys():
route[a].sort(reverse = True)
# DFS로 순회 (stack이 다 빌때까지)
stack = ["ICN"]
while stack:
top = stack.pop()
if top not in route or not route[top]:
answer.append(top)
else:
stack.append(top)
stack.append(route[top].pop())
return answer[::-1]
초기 아이디어를 잡는게 어려웠던 문제... 꼭 다시 풀것