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번째 줄)
- 묶음으로 최대한 채우되, 남은 낱개는 낱개 가격으로 계산합니다.
후기
쓸데없이 케이스분류를 너무 해서 틀렸습니다가 엄청 많이 떴었습니다... 큰 그림에서 작은 그림으로 들어가는 데에 더 익숙해지도록 노력해야겠습니다.
'코딩테스트' 카테고리의 다른 글
[Python] 백준 14936번 - '엘레베이터 장난' (2) | 2023.01.19 |
---|---|
[Python] 백준 12873번 - '기념품' 풀이 (3) | 2023.01.18 |
[Python] 백준 3085번 - '사탕 게임' 풀이 (1) | 2023.01.17 |
[Python] 백준 10546번 - '배부른 마라토너' 풀이 + 해시(hash) (1) | 2023.01.17 |
[Python] 백준 2980번 - '도로와 신호등' 풀이 (2) | 2023.01.16 |