티스토리 뷰

 

1049번: 기타줄

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

www.acmicpc.net


1. 문제 내용

 

 

2. 접근 방식

  • 각 패키지 가격과 낱개 가격의 최소값만 신경 쓰면 된다.

최소값을 구해야 하므로, 패키지의 가격의 최소값과 낱개 가격의 최소값만 필요하다.

 

  • 값을 구하는 방법은 총 3가지

n = 10이고, 패키지 가격의 최소값 p = 20, 낱개 가격의 최소값 q = 4이라고 가정하자. 그럼 총 값을 구하는 방법은 다음과 같다.

  • 패키지 6개로 최대한 구매한 후, 나머지를 낱개로 구매하는 경우
    • n // 6 * p + n % 6 * q = 10 // 6 * 20 + 10 % 6 * 4 = 1 * 20 + 4 * 4 = 36
  • 필요한 기타줄 개수를 초과하더라도, 패키지로만 구매하는 경우
    • (n // 6 + 1) * p = (10 // 6 + 1) * 20 = 2 * 20 = 40
  • 모든 기타줄을 낱개로 구매하는 경우
    • n * q = 10 * 4 = 40

위 세 가지로 구한 값 중에서 매번 최소값을 선택하면 된다.

 

 

3. 정답 코드

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

package = []
unit = []
for _ in range(m):
    x, y = map(int, input().split())
    package.append(x)
    unit.append(y)

p = min(package)
q = min(unit)

result = min(n//6 * p + n%6 * q, (n//6 + 1) * p, n * q)
print(result)
728x90