반응형
https://www.acmicpc.net/problem/1049
1. 문제
N개의 줄을 교체하려고 한다. 6줄 패키지를 사거나 1개 또는 그 이상의 줄을 낱개로 살 수 있다. 이때 M개의 브랜드에 따른 패키지가격과 낱개 가격이 주어질 때 기타줄을 교체하는데 최소금액을 구하라.
2. 접근
1. M개의 브랜드를 모두 포함하여 최소 패키지 금액과 최소 낱개 금액을 구한다.
2. 패키지와 낱개를 이용하여 구매할 때의 경우의 수를 나눈다.
- 1.전부 다 낱개로 사는게 저렴한 경우
- => if 낱개 * 6 < 패키지
- 2. 전부 다 패키지로 사는게 저렴할 경우
- 6개씩 묶고 나서 남은 개수도 패키지로 사는게 저렴한 경우 => if 낱개 * (n%6) > 패키지
- 3. 6개씩은 패키지로 사고, 나머지는 낱개로 사는 경우
- => 패키지 * (n // 6) + 낱개 * (n % 6)
3. 소스코드
n, b = map(int, input().split())
brand = [list(map(int, input().split())) for _ in range(b)]
def m(brand):
min_p, min_u = 1001, 1001
for cost in brand:
if min_p > cost[0]:
min_p = cost[0]
if min_u > cost[1]:
min_u = cost[1]
return min_p, min_u # 최소 패키지 금액과 최소 낱개 금액을 구한다.
def m2(min_p, min_u, n):
if min_u * 6 < min_p: # 6개 낱개로 사는게 패키지로 사는 것보다 이득
return min_u * n
if min_u * (n%6) > min_p: # 나머지도 패키지로 사는게 이득
return min_p * (n//6 + 1)
return min_p * (n//6) + min_u * (n%6) # 6개씩은 패키지로 구매하고 나머지는 낱개로 구매
min_p, min_u = m(brand)
print(m2(min_p, min_u, n))
반응형
'컴퓨터공학 > 알고리즘' 카테고리의 다른 글
Python Algorithm. 1주차 스터디 계획 (0) | 2020.05.11 |
---|---|
[백준] 1449. 수리공 항승 (0) | 2020.05.09 |
[백준] 1120. 문자열 (0) | 2020.05.09 |
[백준] 10610. 30 (0) | 2020.05.09 |
[백준] 2217. 로프 (0) | 2020.05.09 |