주어진 항공권을 모두 이용하여 여행경로를 짜려고 합니다. 항상 "ICN" 공항에서 출발합니다.
항공권 정보가 담긴 2차원 배열 tickets가 매개변수로 주어질 때, 방문하는 공항 경로를 배열에 담아 return 하도록 solution 함수를 작성해주세요.
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"]
Code_1 - 실행 에러
from collections import deque def solution(tickets): answer = [] visited = [False]*len(tickets) q = deque() q.append("ICN") while q: airs = {} air = q.popleft() answer.append(air) for i in range(len(tickets)): if not visited[i] and tickets[i][0] == air: airs[tickets[i][1]] = i if len(airs) >= 1: airs = sorted(airs.items())[0] visited[airs[1]] = True q.append(airs[0]) return answer
- 적용한 적이 없고 출발지가 같다는 조건하에 dictionary에 담아 알파벳 순서대로 정렬하도록 구현하였음
- bfs 알고리즘을 이용함
Code_2 - 성공
def solution(tickets): answer = [] visited = [False]*len(tickets) tickets = sorted(tickets, key=lambda x: (x[0], x[1])) def dfs(air, path): if len(path) == len(tickets)+1: answer.append(path) return answer for idx, tick in enumerate(tickets): if not visited[idx] and air == tick[0]: visited[idx] = True dfs(tick[1], path+[tick[1]]) visited[idx] = False dfs('ICN', ['ICN']) return answer[0]
- code_1에서와 같이 bfs를 이용해 해결하기 어려움을 겪어, dfs 알고리즘을 이용해 구현함
- 우선 ticket를 알파벳 순으로 정렬한 후 tickets의 수보다 공항 경로가 1만큼 많은 경우 반복문을 종료함