728x90

recursive DFS를 이용한 풀이
from collections import defaultdict
def dfs(graph, N, key, footprint):
print(footprint)
if len(footprint) == N + 1:
return footprint
for idx, country in enumerate(graph[key]):
graph[key].pop(idx)
tmp = footprint[:]
tmp.append(country)
ret = dfs(graph, N, country, tmp)
graph[key].insert(idx, country)
if ret:
return ret
def solution(tickets):
answer = []
graph = defaultdict(list)
N = len(tickets)
for ticket in tickets:
graph[ticket[0]].append(ticket[1])
graph[ticket[0]].sort()
answer = dfs(graph, N, "ICN", ["ICN"])
return answer
iterative DFS를 이용한 풀이
def solution(tickets):
routes = {}
for t in tickets:
routes[t[0]] = routes.get(t[0], []) + [t[1]]
for r in routes:
routes[r].sort(reverse=True)
stack = ["ICN"]
path = []
while len(stack) > 0:
top = stack[-1]
if top not in routes or len(routes[top]) == 0:
path.append(stack.pop())
else:
stack.append(routes[top][-1])
routes[top] = routes[top][:-1]
return path[::-1]
defaultdict를 활용한 풀이
from collections import defaultdict
def solution(tickets):
answer = []
routes = defaultdict(list)
for ticket in tickets:
routes[ticket[0]].append(ticket[1])
for key in routes.keys():
routes[key].sort(reverse=True)
stack = ['ICN']
while stack:
tmp = stack[-1]
if not routes[tmp]:
answer.append(stack.pop())
else:
stack.append(routes[tmp].pop())
answer.reverse()
return answer반응형
'Coding Test > Programmers' 카테고리의 다른 글
| [프로그래머스/파이썬] 징검다리 (0) | 2022.06.09 |
|---|---|
| [프로그래머스/파이썬] 입국심사 (0) | 2022.06.08 |
| [프로그래머스/파이썬] 단어 변환 (0) | 2022.06.08 |
| [프로그래머스/파이썬] 네트워크 (0) | 2022.06.08 |
| [프로그래머스/파이썬] 타겟 넘버 (0) | 2022.06.07 |