<제한사항>
- 모든 공항은 알파벳 대문자 3글자로 이루어집니다.
- 주어진 공항 수는 3개 이상 10,000개 이하입니다.
- tickets의 각 행 [a, b]는 a 공항에서 b 공항으로 가는 항공권이 있다는 의미입니다.
- 주어진 항공권은 모두 사용해야 합니다.
- 만일 가능한 경로가 2개 이상일 경우 알파벳 순서가 앞서는 경로를 return 합니다.
- 모든 도시를 방문할 수 없는 경우는 주어지지 않습니다.
from collections import deque
def solution(tickets):
answer = []
graph = dict() # 출발 공항: 도착 가능한 공항
# 방문 가능한 공항 그래프 생성
for d, a in tickets:
graph[d] = graph.get(d, []) + [a] # key=d에 아무것도 없으면 list 반환
data = deque() # (출발 공항, 방문한 경로 list, 남은 티켓)
data.append(("ICN", ["ICN"], tickets.copy())) # 초기값
while data:
departure, path, ticket = data.popleft()
if not ticket: # 주어진 티켓을 모두 사용한 경우
answer.append(path)
else:
if departure not in graph.keys(): # 갈 수 있는 공항이 없는 경우
# ["ICN", "ATL"], ["ICN", "SFO"]일 때, 최종 목적지가 SFO로 가야하는데
# SFO가 먼저 처리될 경우 continue를 이용하여 ATL로 접근
continue
for arrival in graph[departure]:
if [departure, arrival] in ticket: # 가는 항공권이 있는 경우
nextTicket = ticket.copy()
nextTicket.remove([departure, arrival]) # ticket 사용
data.append((arrival, path + [arrival], nextTicket))
return sorted(answer)[0]
'언어' 카테고리의 다른 글
체육복 여분이 있어도 도난을 당하다니 (0) | 2024.02.22 |
---|---|
ct 정리 (0) | 2024.02.21 |
단어 변환 최소 스텝: BFS (0) | 2024.02.16 |
네트워크 덩어리 세기: DFS (0) | 2024.02.16 |
target으로 계산되는 경우의 수 구하기: DFS (0) | 2024.02.16 |