문제 : https://school.programmers.co.kr/learn/courses/30/lessons/43164
[["ICN", "BBB"], ["ICN", "CCC"], ["CCC", "ICN"]]stack = ["ICN"] // 시작값 스택에 저장
path = []
temp = ""
stack = ["ICN", "BBB"] // 2. 출발, 도착 저장
path = []
temp = "ICN" // 1. 스택 값 pop
stack = ["ICN"]
path = ["BBB"] // 2. 출발할 곳 없어 저장
temp = "BBB" // 1. 스택 값 pop
stack = ["ICN", "CCC"] // 2. 출발, 도착 저장
path = ["BBB"]
temp = "ICN" // 1. 스택 값 pop
stack = ["ICN", "CCC", "ICN"] // 2. 출발, 도착 저장
path = ["BBB"]
temp = "CCC" // 1. 스택 값 pop
stack = ["ICN", "CCC"]
path = ["BBB", "ICN"] // 2. 갈 곳 없어 저장
temp = "ICN" // 1. 스택 값 pop
stack = ["ICN"]
path = ["BBB", "ICN", "CCC"]
temp = "ICN"
stack = []
path = ["BBB", "ICN", "CCC", "ICN"]
temp = "ICN"
path 역순 출력
"ICN", "CCC", "ICN", "BBB"
dict 출발: [도착] push
도착을 기준으로 sort
stack 초기 값 push
while stack
stack값 pop
만약 갈 공항이 없다면
끝이라는 뜻이니 path에 저장
아니면 갈 곳이 있다는 뜻이니
stack에 다시 출발과
도착을 저장. 이 때 도착은 dict빼줘야됨. 간 곳이니까
역순으로 출력
from collections import defaultdict
def solution(tickets):
graph = defaultdict(list)
for start, end in tickets:
graph[start].append(end)
for end in graph.keys():
graph[end].sort(reverse=True)
stack = ["ICN"]
path = []
while stack:
temp = stack.pop();
if temp not in graph or not graph[temp]:
path.append(temp)
else:
stack.append(temp)
stack.append(graph[temp].pop())
return path[::-1]