[Python] [Programmers] 여행경로(43164)

긍정왕·2021년 6월 4일
1

Algorithm

목록 보기
15/69

💡 문제 해결

  1. 티켓을 정렬시킨 뒤 dict에 저장
  2. 출발지를 "ICN"으로 설정 후 출발
  3. 현재 위치에서 이동이 가능한 공항을 뽑아낸 뒤 재귀적으로 호출
  4. 깊이 우선 탐색을 활용하여 더이상 이동할 수 없을 시 마지막 위치의 공항부터 정답리스트에 추가
  5. 출력은 저장한 리스트의 역순으로 출력하여 순차적으로 정렬

📌 가능한 경로가 여러개일 경우 알파벳 순서가 앞서는 경로를 return해야 하기 때문에 정렬시킨 뒤 입력
📌 pop()함수를 통해 빠른 이름부터 뽑아내기 위해 reverse=True를 사용, 그렇지 않으면 pop(0)을 사용해야 하기 때문



🧾 문제 설명

주어진 항공권을 모두 이용하여 여행경로를 짜려고 합니다. 
항상 "ICN" 공항에서 출발합니다.
항공권 정보가 담긴 2차원 배열 tickets가 매개변수로 주어질 때, 
방문하는 공항 경로를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

문제보기



🖨 입출력



📝 풀이

from collections import defaultdict

def dfs(start, airports):
    global answer
    while airports[start]:
        end = airports[start].pop()
        dfs(end, airports)
    answer.append(start)


def solution(tickets):
    global answer
    answer = []

    airports = defaultdict(list)
    for depart, arrive in sorted(tickets, reverse=True):
        airports[depart].append(arrive)
    dfs("ICN", airports)

    return answer[::-1]

profile
Impossible + 땀 한방울 == I'm possible

0개의 댓글