[백준/파이썬] 1049번 기타줄 풀이

업데이트:



문제 정보


풀이

문제

기타줄 N개가 필요할 때, 여러 브랜드의 6개 묶음 가격과 낱개 가격이 주어집니다.

필요한 줄을 가장 저렴하게 구매하는 최소 비용을 구하는 문제입니다.

코드

n, m = tuple(map(int, input().split()))

packs = list()
eachs = list()

for T in range(m):
    pack, each = tuple(map(int, input().split()))
    packs.append(pack)
    eachs.append(each)
    
minPack = min(packs)
minEach = min(eachs)


if(minPack >= minEach*min(6, n)):
    print(n*minEach)
else:
    cntPack = n // 6
    cntEach = 0
    if(minPack <= (n%6)*minEach):
        cntPack+=1
    else:
        cntEach = n % 6
    print(cntPack * minPack + cntEach * minEach)

설명

핵심은 다음 둘 중 더 싼 조합을 선택하는 것입니다.

  • 전부 낱개로 구매
  • 묶음을 최대한 쓰고, 남은 수량은 묶음 1개 추가 vs 낱개 구매 비교

가장 싼 묶음 가격(minPack)과 낱개 가격(minEach)만 알면 전체 최소 비용을 계산할 수 있습니다.



댓글남기기