완전 범죄
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
- 내 풀이
- DFS로 각 물건에 대해 A or B 도둑이 훔치는 경우를 모두 탐색.
- 이미 방문한 (현재 물건, A누적, B누적) 상태는 visited 집합으로 중복 제거.
- 모든 물건을 처리한 시점에 A, B의 흔적이 제한 미만이면 최소 A누적값 갱신.
def solution(info, n, m):
l = len(info)
answer = float('inf')
visited = set()
def dfs(cur, a, b):
nonlocal answer
if cur == l:
if a < n and b < m:
answer = min(answer, a)
return
key = (cur, a, b)
if key in visited:
return
visited.add(key)
if a + info[cur][0] < n:
dfs(cur + 1, a + info[cur][0], b)
if b + info[cur][1] < m:
dfs(cur + 1, a, b + info[cur][1])
dfs(0, 0, 0)
return -1 if answer == float('inf') else answer'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스][정렬] 인사고과 (0) | 2025.06.09 |
|---|---|
| [프로그래머스][정렬] H-Index (0) | 2025.06.09 |
| [프로그래머스][BFS] 혼자 놀기의 달인 (0) | 2025.05.29 |
| [프로그래머스][그리디][백트래킹] 광물 캐기 (8) | 2025.05.28 |
| [프로그래머스][BFS] 다단계 칫솔 판매 (1) | 2025.05.27 |