ALGORITHM/PYTHON

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

칼코
반응형

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


<문제 출처>

https://www.acmicpc.net/problem/1049

 

1049번: 기타줄

첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주

www.acmicpc.net

<풀이>

먼저 주어진 브랜드 중에서 6줄 패키지 가격과 낱개의 가격이 최소인 것만 뽑았다.

필요한 기타줄을 패키지로만 구매할지, 낱개로만 구매할지,

아니면 패지키와 낱개를 적절히 섞을지 계산하기 위해 if 문을 활용했다.

 

<코드>

import sys
input = sys.stdin.readline

N, M = map(int, input().split())
package = []
piece = []
for _ in range(M) :
    a, b = map(int, input().split())
    package.append(a)
    piece.append(b)

min_pk = min(package)
min_pc = min(piece)

if N <= 6 :	# 필요한 기타줄이 6개 이하
    result = min(min_pk, min_pc * N)
else :	# 그 외
    if N % 6 == 0 :	# 필요한 기타줄이 6으로 나누어 떨어지는 지 판별
        tmp = (N // 6)
    else :
        tmp = (N // 6) + 1
    
    result = min(tmp * min_pk, N * min_pc)	# 패키지로만 구매, 낱개로만 구매의 최소값
    for i in range(1, tmp) :	# 패키지, 낱개를 섞어서 샀을 때 최소값이 나오면 저장
        result = min(result, min_pk * i + (N-i*6) * min_pc)

print(result)
반응형