[PS] 코딩 테스트 공부

owo·2023년 2월 25일
0

PS

목록 보기
23/25

문제 링크

코드

MAX = 987654321

def solution(alp, cop, problems):
    galp = max(max([x[0] for x in problems]), alp)
    gcop = max(max([x[1] for x in problems]), cop)
    
    problems = [[0, 0, 1, 0, 1], [0, 0, 0, 1, 1]] + problems
    dp = [([MAX] * (gcop + 1)) for _ in range(galp + 1)]
    dp[alp][cop] = 0
    
    for calp in range(alp, galp + 1):
        for ccop in range(cop, gcop + 1):
            solvable = list(filter(lambda x: x[0] <= calp and x[1] <= ccop, problems))
            for _, _, ralp, rcop, cost in solvable:
                nalp = min(calp + ralp, galp)
                ncop = min(ccop + rcop, gcop)
                ncost = dp[calp][ccop] + cost
                
                dp[nalp][ncop] = min(dp[nalp][ncop], ncost)
    
    return dp[galp][gcop]
                

리뷰

  • 처음 문제를 보았을 때 어떤 식으로 풀어야 될지 감을 잡지 못했고 해설을 보고 DP 문제라는 것을 알고 나서야 풀 수 있었다. PS 경험의 부족이라고 느꼈고 더 많은 문제를 풀어봐야 겠다
  • 처음 문제를 풀고 채점했을 때 런타임 에러가 발생했다. 런타임 에러를 보고 index out of range라고 추측했고, 어떤 상황에서 해당 오류가 발생할 수 있을지 고민하다 보니 초기값이 실제 값보다 큰 경우를 고려하지 않았다는 것을 깨달았다. 오류를 해결하는 접근 방식이 좋았다고 느꼈다.

0개의 댓글