첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주어진다. 가격은 0보다 크거나 같고, 1,000보다 작거나 같은 정수이다.
출력
첫째 줄에 기타줄을 적어도 N개 사기 위해 필요한 돈의 최솟값을 출력한다.
입력 예시
4 2
12 3
15 4
출력 예시
12
풀이
기본적인 그리디 문제.
우선 M개의 가게에서 패키지 중 가장 싼 패키지와, 낱개 중 가장 싼 낱개만을 고려해주어도 된다. 그렇다면 다음과 같이 생각해 볼 수 있겠다.
낱개 x 6이 패키지보다 쌀 경우 : 그냥 낱개로 결제하면 된다.
그렇지 않은 경우 :
가능한 한 최대한 패키지로 구매하되, 마지막 나머지 (N % 6, 0에서 5 사이)를 낱개로 사거나, 패키지 하나를 추가로 사는 것 중 더 싼 경우를 택해야 한다.
풀이 코드
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
s, t = float('inf'), float('inf')
for _ in range(M) :
_s, _t = map(int, input().split())
s = min(s, _s)
t = min(t, _t)
if s >= t*6 :
print(t * N)
else :
print(s * (N // 6) + min(s, t * (N % 6)))