https://school.programmers.co.kr/learn/courses/30/lessons/118668?language=python3
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
모든 문제를 해결하기 위해 알고력과 코딩력의 최댓값을 계산한다.
dp [i][j]는 알고력이 i, 코딩력이 j에 도달하기까지의 최소 시간을 저장한다.
dp [현재 알고력+증가 알고력][현재 코딩력+증가 코딩력]에 d dp[현재 알고력+증가 알고력][현재 코딩력+증가 코딩력] 과 dp [현재 알고력][현재 코딩력]+걸린시간 중 최솟값을 갱신한다.
만약 현재 알고력+증가 알고력 또는 현재 코딩력+증가 코딩력이 최대 알고력, 최대 코딩력을 넘으면 dp배열 인덱스를 넘어서지 않게 알고력 최댓값, 코딩력 최댓값으로 넣어주었다.
def solution(alp, cop, problems):
answer = 10**16
maxalp = alp
maxcop = cop
# 1의 시간을 소모하여 1을 올리는 케이스도 추가해준다
problems.append([0,0,1,0,1])
problems.append([0,0,0,1,1])
# 최대 alp와 cop를 구한다
for alp_req, cop_req, alp_rwd, cop_rwd, cost in problems:
maxalp = max(maxalp, alp_req)
maxcop = max(maxcop, cop_req)
# dp[i][j] 는 alp가 i, cop가 j가 되는 최소 시간
dp = [[10**16]*(maxcop+1) for _ in range(maxalp+1)]
dp[alp][cop] = 0
for curalp in range(alp,maxalp+1):
for curcop in range(cop,maxcop+1):
for alp_req, cop_req, alp_rwd, cop_rwd, cost in problems:
if alp_req>curalp or cop_req>curcop:
continue
nextalp = maxalp if curalp+alp_rwd>maxalp else curalp+alp_rwd
nextcop = maxcop if curcop+cop_rwd>maxcop else curcop+cop_rwd
dp[nextalp][nextcop] = min(dp[nextalp][nextcop],dp[curalp][curcop]+cost)
answer = dp[maxalp][maxcop]
return answer
'python' 카테고리의 다른 글
| [백준] 2250 트리의 높이와 너비, python (0) | 2025.10.05 |
|---|---|
| [백준] 14236 명제 증명, python (1) | 2025.10.04 |
| [프로그래머스] 주사위 고르기, python (0) | 2025.10.04 |
| [프로그래머스] 미로 탈출 명령어, python (0) | 2025.10.04 |
| [백준] 17825 주사위 윷놀이, python (0) | 2025.10.04 |