
문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/43164
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이
DFS를 활용한 문제이다. dictionary를 활용하여 전체 티켓들을 사용해 마치 graph와 같은 구조를 완성하고, 이를 DFS로 순회하면 된다. DFS로 순회하며, 더 이상 이동할 수 없는 경우가 되면 그 때 위치하는 공항을 answer 배열에 저장한다.
다만 주의해야할 점이 있는데, 가능한 경로가 2개 이상일 땐 알파벳 경로가 앞서는 경우를 반환하라고 했기 때문에 그래프를 완성할 때 정렬이 필요하다는 점을 고려하며 구현해야 한다.
from collections import defaultdict
def solution(tickets):
answer = []
routes = defaultdict(list)
for ticket in tickets: # 전체 티켓들을 순회하며
depart, arrive = ticket
routes[depart].append(arrive) # 그래프를 만들기
for route in routes.values():
route.sort(reverse=True) # 알파벳 순으로 그래프에서 pop하기 위해 알파벳의 역순으로 정렬 (pop은 배열의 뒤에서부터 데이터를 꺼냄)
def dfs(airport):
while routes[airport]: # 다음 공항이 존재하면
next_dep = routes[airport].pop()
dfs(next_dep) # 다음 공항부터 이어서 DFS 수행
else:
answer.append(airport) # 더 이상 이동할 공항이 없으면 answer 배열에 저장
dfs("ICN") # 인천 공항부터 시작
return answer[::-1] # 더 이상 이동할 수 없는, 마지막 공항부터 배열에 넣었기 때문에 거꾸로 정렬하여 반환
'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스 Lv.3] 단어 변환 (Python) (2) | 2025.01.13 |
---|---|
[프로그래머스 Lv.2] 괄호 변환 (Python) (0) | 2024.12.30 |
[프로그래머스 Lv.2] 타겟 넘버 (Python) (1) | 2024.12.08 |
[프로그래머스 Lv.2] 줄 서는 방법 (Python) (0) | 2024.11.20 |
[프로그래머스 Lv.2] 스킬트리 (Python) (0) | 2024.11.17 |