문제
문제 설명
주어진 항공권을 모두 이용하여 여행경로를 짜려고 합니다. 항상 "ICN" 공항에서 출발합니다.
항공권 정보가 담긴 2차원 배열 tickets가 매개변수로 주어질 때, 방문하는 공항 경로를 배열에 담아 return 하도록 solution 함수를 작성해주세요.
제한사항
- 모든 공항은 알파벳 대문자 3글자로 이루어집니다.
- 주어진 공항 수는 3개 이상 10,000개 이하입니다.
- tickets의 각 행 [a, b]는 a 공항에서 b 공항으로 가는 항공권이 있다는 의미입니다.
- 주어진 항공권은 모두 사용해야 합니다.
- 만일 가능한 경로가 2개 이상일 경우 알파벳 순서가 앞서는 경로를 return 합니다.
- 모든 도시를 방문할 수 없는 경우는 주어지지 않습니다.
코드
from collections import defaultdict
def solution(tickets):
route, tmp = [], ["ICN"] #route는 최종 방문 루트이고 tmp는 방문 가능한 공항을 저장한다
tickets = sorted(tickets, key = lambda x: x[1], reverse = True) #방문 가능한 공항을 기준으로 내림차순 정렬
dic = defaultdict(list) #공항별 방문가능한 공항 저장
for ticket in tickets:
dic[ticket[0]].append(ticket[1])
while tmp:
while dic[tmp[-1]]: #방문 가능한 공항이 추가됨으로서 다음 공항에서의 방문 가능한 공항을 추가
tmp.append(dic[tmp[-1]].pop()) #현재 공항이 방문 가능한 공항을 pop
route.append(tmp.pop())
return route[::-1]
진행 과정
이 문제는 dfs/bfs 문제이지만 굳이 dfs/bfs로 풀지 않아도 되기때문에 맘대로 풀었다.
진행 과정을 설명하기위한 예제는 "질문하기"에서 공유된 테스트 케이스를 사용하겠다.
테스트 케이스 #1
tickets = [["ICN", "COO"], ["ICN", "BOO"], ["COO", "ICN"], ["BOO", "DOO"]]
다음의 진행 과정을 이해하기 위해서 두 가지 조건을 뼛속까지 새겨넣으면 된다.
1. 주어진 항공권은 모두 사용해야한다.
2. 모든 도시를 방문할 수 없는 경우는 주어지지 않는다. 이 말은 공항을 방문하다가 중간에 끊기고 방문 할 수 없는 공항이 생길 수 없다는 말이다. 그렇기때문에 6), 7) 과정이 가능한 것이다.
1) dic = {'COO': ['ICN'], 'BOO': ['DOO'], 'ICN': ['COO', 'BOO']} #공항별 방문가능한 공항을 dictionary로 저장
2) answer = ['ICN', 'BOO', 'DOO'] #"ICN" -> "BOO" -> "DOO" 로 공항을 방문할 수 있다.
3) route = ['DOO'] #가장 마지막에 방문하는 공항을 route에 pop
4) answer = ['ICN', 'BOO'] #"BOO"에서 방문 가능한 공항이 없으므로 pass
5) route = #"BOO"를 pop하여 route에 저장
6) answer = ['ICN', 'COO', 'ICN'] #"ICN"은 다시 "ICN" -> "COO" -> "ICN"으로 방문할 수 있다
7) route = ['DOO', 'BOO', 'ICN'] #"ICN"을 pop하여 route에 추가
8) answer = ['ICN', 'COO'] #"COO"는 더 이상 방문 가능한 공항이 없으므로 pass
9) route = ['DOO', 'BOO', 'ICN', 'COO'] #"COO"을 pop하여 route에 추가
10) answer = ['ICN'] #"ICN" 는 더 이상 방문 가능한 공항이 없으므로 pass
11) route = ['DOO', 'BOO', 'ICN', 'COO', 'ICN'] #방문 가능한 공항의 경로가 모두 저장되었다.
12) return route[::-1] = ['ICN', 'COO', 'ICN', 'BOO', 'DOO']
'Algorithm & Data Structure > Programmers' 카테고리의 다른 글
[Programmers]Python_이중우선순위큐 (0) | 2020.12.09 |
---|---|
[Programmers]Python_입국심사 (0) | 2020.12.08 |
[Programmers]Python_섬 연결하기 (0) | 2020.12.06 |
[Programmers]Python_가장 먼 노드 (0) | 2020.12.06 |
[Programmers]Python_단어 변환 (0) | 2020.12.05 |