-
[Python] programmers 여행 경로알고리즘/문제풀이 2021. 12. 12. 12:49728x90
1. 문제 링크
https://programmers.co.kr/learn/courses/30/lessons/43164
코딩테스트 연습 - 여행경로
[["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL","SFO"]] ["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"]
programmers.co.kr
2. 문제 요약
방문하는 공항 경로를 배열에 담아 return
3. 아이디어 정리
- 백트래킹으로 진행합니다.
- 처음 ICN를 배열에 담아 넘겨줍니다.
- 티켓들 중 마지막으로 탐색한 값과 시작값이 같은 티켓 & 방문 안한 경우 재귀를 진행합니다.
4. 문제 풀이
4-1. 내 풀이
""" 항상 ICN 공항에서 출발 [a, b]는 a 공항에서 b 공항으로 가는 항공권이 있다는 의미입니다. """ import copy first = True def solution(tickets): def dfs(arr): global first global answer if len(tickets) + 1 == len(arr): # 1. Base condition(종료 조건) if first: answer = copy.deepcopy(arr) first = False return # 2. 백트래킹. 다음으로 갈수 있는 모든 티켓 사용 for i, a in enumerate(tickets): s, e = a if arr[-1] == s and not visit[i]: # 마지막 방문 도시 == 현재 시작 도시 & 방문 안한 경우 arr.append(e) visit[i] = True dfs(arr) arr.pop() visit[i] = False visit = [False] * len(tickets) tickets.sort() dfs(["ICN"]) return answer
5. 결론
- 백트래킹
'알고리즘 > 문제풀이' 카테고리의 다른 글
[Python] 백준 2623 음악프로그램 (0) 2021.12.15 [Python] 백준 14567 선수과목 (0) 2021.12.15 [Python] 백준 2580 스도쿠 (0) 2021.12.12 [Python] 백준 15656 N과 M (7) (0) 2021.12.12 [Python] programmers 뉴스 클러스터링 (0) 2021.12.04