코딩테스트

[Programmers][Level 3] 여행경로

hoon123 2023. 4. 2. 19:24

DFS : Depth-First Search > 스택을 이용하여 어느 정점에서 DFS를 하고 있는지를 기억하고 되돌아감

BFS : Breadth-First Search > 큐를 사용하여 어느 정점에서 BFS를 해야 하는지를 기록하고 진행함

 

DFS를 응용

- 한붓 그리기 문제이다.

- 시작 정점은 "ICN"

- 모든 간선을 거쳐야됨

- 한 정점에서 택할 수 있는 간선이 여러 개인 경우 알파벳 순서를 따름 

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].pop()
    
    return path[::-1]