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을 넣는다.
- 인천공항에서 갈 수 있는 공항은 AAA와 BBB가 있는데, AAA가 알파벳 순서가 우선하므로 AAA를 스택에 집어 넣는다.
- AAA를 넣었는데 갈 수 있는 곳이 없네 ? AAA를 꺼내서 어딘가에 적어둔다.
- 원래 공항인 인천공항에 돌아와서 나머지 DFS를 한다.
def solution(tickets):
graph = dict()
for s, e in tickets:
if s in graph:
graph[s].append(e)
graph[s].sort(reverse=True) # 알파벳 빠른 순으로 빼내야하는데 stack은 후입선출이므로
else:
graph[s] = [e]
path = ['ICN']
ans = []
while path:
top = path[-1]
if top not in graph or len(graph[top]) == 0:
ans.append(path.pop())
else:
path.append(graph[top].pop())
ans.reverse()
return ans