반응형
진짜 오랜만에 코딩테스트 풀어봤다. 이 문제는 누산해가는 전형적인 dp문제이다. 쉬울 줄 알았는데 감이 다 죽었는지, 어려워서 결국 딥시크한테 힌트 달라고 했다. 참고로 같은 문제를 ChatGPT는 풀지 못했다!
의사코드
1. info에 대해서 반복(2~4)
2. ckpt에 대해 반복
3. A와 B가 훔치는 두 경우의 수를 n_ckpt에 기록한다.
4. ckpt를 n_ckpt로 업데이트한다.
코드
def solution(info, n, m):
ckpt = {0:0}
for x, y in info:
n_ckpt = {}
for xx, yy in ckpt.items():
if xx + x < n:
if xx + x not in n_ckpt or n_ckpt[xx+x] > yy:
n_ckpt[xx + x] = yy
if yy + y < m:
if xx not in n_ckpt or n_ckpt[xx] > yy + y:
n_ckpt[xx] = yy + y
if n_ckpt:
ckpt = n_ckpt
else:
return -1
return min(ckpt.keys())
각 단계별로 최소의 Y 누적합만을 선택
def solution(info, n, m):
ckpt = set([(0,0)])
for x, y in info:
n_ckpt = set()
for xx, yy in ckpt:
if xx + x < n:
n_ckpt.add((xx+x,yy))
if yy + y < m:
n_ckpt.add((xx,yy+y))
if n_ckpt:
ckpt = n_ckpt
else:
return -1
return min(A for A, _ in ckpt)
각 단계에서 중복만 확인하고 최소인 경우 뿐만 아니라 모든 경우를 기록함. (시간복잡도 증가)
반응형
'Software Engineering' 카테고리의 다른 글
[SQL 문제 풀이] 프로그래머스 "멸종위기 대장균 찾기" (0) | 2024.09.29 |
---|---|
[SQL 문제 풀이] 프로그래머스 "물고기 종류 별 대어 찾기" (0) | 2024.03.21 |
[SQL 문제 풀이] 프로그래머스 "언어별 개발자 분류하기" (0) | 2024.03.18 |
[Python 문제 풀이] 프로그래머스 "[PCCP 기출문제] 2번 / 석유 시추" (0) | 2024.03.17 |
[Python 문제 풀이] 프로그래머스 "[PCCP 기출문제] 4번 / 수레 움직이기" (0) | 2024.03.17 |