개발 연습장/백준 문제풀이

[파이썬, Python] 백준 1049: 기타줄

LooanCheong 2023. 6. 27. 10:58
반응형

문제

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

 

1049번: 기타줄

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

www.acmicpc.net

코드

import sys
input = sys.stdin.readline

n, m = map(int, input().split())
pack = list()
one = list()


for _ in range(m):
    a, b = map(int, input().split())
    pack.append(a)
    one.append(b)

min_pack, min_one = min(pack), min(one)

if min_pack > min_one * 6:
    print(n * min_one)
else:
    if (n % 6) * min_one < min_pack:
        print(((n // 6) * min_pack) + ((n % 6) * min_one))
    else:
        print(((n // 6) + 1) * min_pack)

설명

우선 1개짜리의 최솟값과 패키지의 최솟값을 구해준다.
(그 이외의 것은 살 이유가 없다.)

그리고 비교를 해줘야 하는데,
우선 패키지의 최솟값과 개별 구매의 최솟값에 6개를 곱한 값을 비교해 준다.
(개수를 맞춰서 비교)
이때 개별 구매 가격이 더 싸다면 모든 줄을 개별로 구매한 값을 출력한다.

그렇지 않다면,
패키지가 더 싸다는 것이므로 6개 단위는 패키지로 구매하고
그렇지 않은 나머지 값을 비교해야 한다.
(15개를 구매한다고 가정하면 12개는 패키지로 구매 나머지 3개에 대한 계산)

만약 나머지 값이 패키지의 값보다 싸다면 해당 개수는 개별 구매,
그리고 나머지는 패키지의 가격으로 계산한다.

만약 나머지의 값이 패키지 값보다 비싼 경우에는 패키지를 하나 더 사는 게 이득이므로
6개 단위를 패키지로 구매한 것에 나머지도 패키지로 구매하여 계산한 결과를 출력해 준다.
(15개를 구매한다고 가정하면 패키지 2개(12개에 대한 것)+1개(나머지 3개에 대한 것))

반응형