문제 설명 및 제한사항
아이디어 및 해결 방법
코드
from collections import namedtuple
from heapq import heappush, heappop
from math import inf
Problem = namedtuple('Problem', ['cost', 'areq', 'creq', 'arwd', 'crwd'])
def solution(alp, cop, problems):
    dist, visited, q = {(alp, cop): 0}, set(), []
    
    problems = [Problem(cost, areq, creq, arwd, crwd) for areq, creq, arwd, crwd, cost in problems]
    problems += [Problem(1, 0, 0, 1, 0), Problem(1, 0, 0, 0, 1)]
    
    maxareq = max(p.areq for p in problems)
    maxcreq = max(p.creq for p in problems)
    
    heappush(q, (0, alp, cop))
    while len(q) > 0:
        d, a, c = heappop(q)
        
        if (a, c) in visited:
            continue
        else:
            visited.add((a, c))
            
        for p in problems:
            newa, newc = min(a+p.arwd, maxareq), min(c+p.crwd, maxcreq)
            newcost = d + p.cost
            if a >= p.areq and c >= p.creq and newcost < dist.get((newa, newc), inf):
                dist[(newa, newc)] = newcost
                heappush(q, (d + p.cost, newa, newc))
                
    return dist[(maxareq, maxcreq)]
Python
복사
출처
프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges