[백준] 1049.기타줄

jeongjeong2·2023년 5월 14일
0

For coding test

목록 보기
47/59

문제 바로가기

문제 풀이

prices 리스트를 정의하고 가능한 가격을 모두 append시킨 후에 min(prices)를 출력한다.
1. 한 브랜드 내에서만 구매해야하는 줄 알았다. -> A브랜드 package + B브랜드 single로 구매해서 더 싼 경우 발생
2. 여러 브랜드도 고려해서 구매. 기타줄 개수 맞춰서 6의 배수인 경우 min(package_price)x몫, 아닌 경우에는 min(package_price)x몫 + min(single_price)x나머지로 append -> 개수 맞춰사지 않고, 패키지로만 구매해서 필요한 기타줄보다 더 구매해도 싼 경우가 발생
3. (최종) 여러 브랜드 고려해서 기타줄 맞춰서 구매한경우 + 패키지로 구매한 경우 모두 고려해준다. 1번의 brand 입력에 대해서 (나누어 떨어질 때 패키지로 구매한 경우, 나누어 떨어지지 않을 때 패키지로만 구매한 경우, 개수 맞춰서 패키지+single로 구매한 경우, 모두 낱개로 구매한 경우) 총 4개의 price를 append시킨다.

정답 코드

"""
https://www.acmicpc.net/problem/1049
"""
N, M = map(int,input().split())
pack = []
single = []
prices = []

for _ in range(M):
    a,b = list(map(int,input().split()))
    pack.append(a)
    single.append(b)
    if N%6 == 0:
        prices.append(min(pack)*(N//6)) 
    else:
        prices.append(min(pack)*(N//6)+min(single)*(N%6))
        prices.append(min(pack)*(N//6+1))
    prices.append(min(single)*N)

print(min(prices))

0개의 댓글