문제 : https://programmers.co.kr/learn/courses/30/lessons/43164
일단 그냥 풀어본 방법.
문제는 모든 티켓을 다 사용하지 못했는데 갈 곳이 끊겼을 때.
이걸 고려하지 않고 그냥 코드를 짜서 실패.
def solution(tickets):
answer = ['ICN']
check = [True] * len(tickets)
depart = 'ICN'
idx = 0
while True in check:
arrival = 'XXX'
arr_idx = 0
for i in range(len(tickets)):
if check[i] and tickets[i][0] == depart and tickets[i][1] < arrival:
arrival = tickets[i][1]
arr_idx = i
answer.append(arrival)
check[arr_idx] = False
depart = arrival
return answer
DFS로 풀어보려 했는데 도저히 중간에 갈 곳이 끊겼을 때 대처법이 생각이 안남.
키 포인트는 갈 곳이 없다는 것 == 마지막 종착지라는 것
그래서 마지막 종착지부터 answer에 삽입하면 해결 가능.
def solution(tickets):
answer = []
routes = {route[0]:[] for route in tickets}
for start, end in tickets:
routes[start].append(end)
for r in routes.keys():
routes[r].sort(reverse=True)
stack = ['ICN']
while stack:
depart = stack[-1]
if (depart not in routes) or (not len(routes[depart])):
answer.append(stack.pop())
else:
stack.append(routes[depart].pop())
answer.reverse()
return answer