DFS 로 풀었다. 1,2번 케이스에서 계속 틀려서 질문하기에 있는 여러 테스트 케이스들을 돌려보면서
주의사항을 생각 할 수 있었다.
주의해야 할 점
EX) [["ICN","AAA"], ["AAA","BBB"],["BBB","AAA"],["AAA","BBB"],["BBB","AAA"]]
EX) [["ICN","AAA"],["ICN","BBB"],["BBB","ICN"]]
1) graph에 티켓 정보를 담아두고, 다음 node 방문 전 ticket을 제거
2) 잘못된 경로(모든 티켓을 소비 할 수 없는)로 들어간 경우 False를 return 받도록 함.
false인 경우 제거한 티켓을 순서상 가장 뒤에 추가하고 answer에 더했던 node를 삭제
def solution(tickets):
answer = []
graph = dict()
for [fr, to] in tickets:
if graph.get(fr) == None:
graph[fr] = []
graph[fr].append(to)
for fr in graph.keys():
graph[fr] = sorted(graph[fr])
def get_ticket_counts(graph):
count = 0
for key in graph.keys():
count += len(graph[key])
return count
def dfs(node):
answer.append(node)
# print("dfs", node, answer)
if get_ticket_counts(graph) == 0:
# print("completed")
return True
if graph.get(node) == None or len(graph[node]) == 0:
return False
for next in graph[node][:]:
graph[node].remove(next)
completed = dfs(next)
if completed:
return True
else:
graph[node].append(next)
answer.pop()
# print("not completed", node, next, answer)
dfs("ICN")
# print("answer", answer, g)
return answer