알고리즘/프로그래머스
[프로그래머스] 여행 경로 by 파이썬(Python) : DFS
코딩하는이씨
2023. 7. 27. 18:02
728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/43164
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
난이도
LV3
문제 설명
- [출발지,도착지] 형태로 적힌 항공권 정보 List가 주어진다.
- 출발지는 항상 ICN 공항에서 출발하며 모든 항공권을 사용해야 한다.
- 이를 만족하는 경로를 Return하고
- 만약 만족하는 경로가 2개 이상일 경우 알파벳 순서가 앞서는 경로를 Return한다.
접근법
- 스택에 ICN을 넣어준다.
- 출발지와 도착지 정보가 담긴 dictionary 배열의 key(출발지) 와 value(도착지)리스트 를 이용해 담아준다.
- 알파벳 순서대로 티켓을 사용하기 위해 각 key에 대해 value(도착지) 리스트를 역순으로 정렬해준다. => (pop으로 꺼내기 때문에 역순 정렬)
- 스택이 비어있지 않다면 스택의 마지막 값을 꺼낸다.
- 만약 마지막 도착지로 부터 더 이상 갈 도착지가 없다면 return해줄 배열에 추가한 후 스택에서 제거해준다.
- 다음 도착지로 갈 수 있다면 다음 도착지를 스택에 추가해준 후 해당 도착지를 dictionary에서 제거해준다.
- 역순으로 return해준다.
코드
def solution(tickets):
answer = []
dic = {}
stack = ["ICN"]
for s, e in tickets:
if s not in dic:
dic[s] = [e]
else:
dic[s].append(e)
for k in dic.keys():
dic[k].sort(reverse=True)
while stack:
top = stack[-1]
#더 이상 갈 수 있는 도착지가 없을때
if (top not in dic) or (not dic[top]):
answer.append(stack.pop())
else:
stack.append(dic[top].pop())
return answer[::-1]
728x90
반응형