본문 바로가기

알고리즘/python

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

반응형

[문제 출처]

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

 

1049번: 기타줄

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

www.acmicpc.net

 

[문제 풀이]

 

N개의 기타 줄을 사려고 할 때 최소한의 비용을 구하는 문제이다.

M개의 브랜드의 기타 줄 가격이 주어지며, 각각 6개 패키지 가격과 1개 낱개 가격이 주어진다.

 

2가지 경우로 나눠볼 수 있는데, 사야 하는 기타 줄의 수가 6개보다 많을 경우와 6개 이하인 경우이다.

6개 이하라면 낱개 n개를 사거나, 남더라도 6개 패키지를 사야 한다. 따라서 패키지 가격 중에 가장 싼 경우와 낱개로 n개 샀을 때의 가격이 가장 쌀 때를 찾아 비교한 후 선택하면 된다.

 

6개보다 많을 때는 6개 패키지와 6개를 낱개로 사는 경우를 비교해 선택한다.

그 후 구매한 수(6)만큼 n에서 빼주며 반복하고, n이 6 이하가 되면 다시 첫 번째 경우가 되어 while문이 끝난다.

#1049

n, m = map(int, input().split())
price6 = []
price1 = []

for i in range(m):
  a,b = map(int, input().split())
  price6.append(a)
  price1.append(b)

sum = 0
while True:
  if n <= 6:
    sum += min(min(price6), min(price1)*n)
    break
  else:
    sum += min(min(price6), min(price1)*6)
    n -= 6

print(sum)
반응형