본문 바로가기
코딩테스트

[Python] 백준 1049번 - '기타줄' 풀이

by CuckooBird 2023. 1. 18.

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

 

1049번: 기타줄

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

www.acmicpc.net


코드

import sys
N, M = map(int, sys.stdin.readline().split())
package_li = []
single_li = []
for _ in range(M):
    package, single = map(int, sys.stdin.readline().split())
    package_li.append(package)
    single_li.append(single)
package = min(package_li)
single = min(single_li)
ans = 0
# 패키지 가격이 낱개*6 보다 쌀 때
if package < single * 6:
    # 패키지 개수
    package_n = N//6
    # 남은 낱개 * 낱개 가격이 패키지 하나보다 비쌀 때
    if N%6 * single > package:
        ans = package_n * package + package # 패키지 하나 더 삼
    else:
        # 남은 낱개 * 낱개 가격이 패키지 하나보다 쌀 떄
        ans = package_n * package + (N%6) * single # 나머지는 낱개로
# 낱개가격이 더 쌀 떄
else:
    ans = N * single
print(ans)

풀다보니 문제가 헷갈려서 코드에 주석으로 풀이 써놓았습니다.

 

조건 1. 묶음 가격이 낱개 (6*낱개) 가격보다 비쌀 경우 (23번째 줄)

- 낱개로만 사면 됩니다.

 

조건 2. 묶음 가격이 낱개 (6*낱개) 가격보다 쌀 경우 (13번째 줄)

   조건 2-1 ) 묶음 가격이 남은 낱개 (N%6 * 낱개) 보다 쌀 경우 (17번째 줄)

   - 묶음으로 하나 더 삽니다.

   조건 2-2 ) 묶음 가격이 남은 낱개 (N%6 * 낱개) 보다 비쌀 경우 (19번째 줄)

   - 묶음으로 최대한 채우되, 남은 낱개는 낱개 가격으로 계산합니다.


후기

쓸데없이 케이스분류를 너무 해서 틀렸습니다가 엄청 많이 떴었습니다... 큰 그림에서 작은 그림으로 들어가는 데에 더 익숙해지도록 노력해야겠습니다.