Life Engineering
[프로그래머스] 여행경로 (Python3) 본문
https://programmers.co.kr/learn/courses/30/lessons/43164
from collections import defaultdict, deque
def solution(tickets):
answer = []
neighbors=defaultdict(list)
for start, end in tickets:
neighbors[start].append(end)
q=deque()
q.append((["ICN"], 0, list(tickets)))
while q:
routes, cnt, temp_tickets=q.popleft()
start=routes[-1]
if (cnt==len(tickets)): #다 돌았으면 answer 반환
answer.append(routes)
if neighbors.get(start) == None: #start가 출발지인 항공권이 없는 경우
continue
for end in neighbors[start]:
if [start, end] in temp_tickets: #쓰지 않은 ticket이 있을 경우
temp_tickets.remove([start,end])
q.append((routes+[end],cnt+1,list(temp_tickets)))
temp_tickets.append([start,end])
answer.sort()
return answer[0]
엄청 헤매다.. 해답을 보았다. 자꾸 히든테케에서 걸렸다..
BFS 로 접근하는 방법을 취했다.
그리고 따로 visit 배열 만들어주지 않고 사용가능한 tickets 배열을 큐에 넣어 이를 체크하여 방문할 수 있도록 했다.
tickets의 길이만큼 방문했을 때, 그 routes를 answer에 넣어준다.
다른 분들의 코드를 보니 DFS로도 풀 수 있다.
쭉 DFS로 파고들어가다가 routes 의 길이가 N+1가 나오면 해당 route를 리턴하는 식이다. 이 경우에는 사전에 오름차순 정렬이 필요하다.
'Problem Solving' 카테고리의 다른 글
[BOJ 21608] 상어 초등학교 (C++) (0) | 2021.10.18 |
---|---|
[BOJ 17779] 게리맨더링 2 (C++) (0) | 2021.10.18 |
[프로그래머스] 전력망을 둘로 나누기 (Python3) (0) | 2021.10.17 |
[프로그래머스] 전화번호 목록 (C++) (0) | 2021.10.16 |
[BOJ 1197] 최소 스패닝 트리 (Python3) (0) | 2021.10.16 |