[파이썬] 프로그래머스 : 여행경로 (Lv.3)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
방향성 생각
- 목적지 -> 도착지점 티켓 수를 딕셔너리로 카운팅한다.
- 딕셔너리 정보를 바탕으로 백트래킹 해주기.
- 이동 가능한 지점이 있으면 티켓을 소모하고 DFS를 돌린다.
- 이동이 불가능하면 그 노드는 더이상 이동하지 않는다.
- 경로가 필요하니 DFS 인자에 마지막 지점을 넘겨줘서 티켓을 모두 사용하는 경우에 경로를 저장하기.
전체코드
'''
티켓 수 백트래킹
'''
from collections import defaultdict as dd
def solution(tickets):
T = len(tickets)
infos = dd(lambda :dd(int))
for a,b in tickets:
infos[a][b] += 1
def dfs(path,T):
nonlocal infos,paths
# 현재 위치
dep = path[-1]
# 티켓 모두 소모했으면 경로 추가
if T==0:
paths.append(path)
return
# 티켓 정보
for arv,t in infos[dep].items():
# 티켓 있으면 티켓 사용하고 DFS
if t:
infos[dep][arv] -= 1
dfs(path+[arv],T-1)
infos[dep][arv] += 1
paths = []
dfs(['ICN'],T)
paths.sort()
return paths[0]
코멘트
- 기본 DFS
'Algorithm > etc' 카테고리의 다른 글
[파이썬] 백준 24041 : 성싶당 밀키트 (골드4) (0) | 2024.06.05 |
---|---|
[파이썬] 프로그래머스 : N으로표현 (레벨3) (0) | 2024.04.24 |
[파이썬] 백준 10986 : 나머지 합 (골드3) (0) | 2024.04.21 |
[파이썬] 백준 2632 : 피자판매 : (골드2) (0) | 2024.02.25 |
[파이썬] 1484 : 다이어트 (골드5) (0) | 2024.01.16 |
[파이썬] 백준 3089 : 네잎 클로버를 찾아서 (골드2) (0) | 2023.12.18 |
[파이썬] 백준 1035 : 조각 움직이기 (골드1) (0) | 2023.12.16 |
댓글