💡문제접근
- 끊어진 기타줄을 사기 위해 필요한 액수의 최솟값을 구하는 문제다. 이 때, 헷갈리면 안되는 점은 6줄 패키지만 살 수도 있고 낱개로 여러 줄을 살 수도 있지만 패키지와 낱개를 섞어서 살 수도 있다는 점이다.
- 패키지의 가격을 기준으로 오름차순 정렬한 리스트 하나를 만들어주고 낱개의 가격을 기준으로 오름차순 정렬한 리스트 하나를 만들어 적어도 N개를 사기 위한 경우를 나누어 리스트에 저장한 다음 리스트의 최솟값을 구하는 방식으로 코드를 작성했다.
💡코드(메모리 : 30616KB, 시간 : 36ms)
N, M = map(int, input().split())
li = []
for _ in range(M):
package_price, single_price = map(int, input().split())
li.append([package_price, single_price])
package_li = sorted(li, key = lambda x : x[0])
single_li = sorted(li, key = lambda x : x[1])
result = []
if N % 6 == 0:
if package_li[0][0] * (N // 6) > single_li[0][1] * N:
result.append(single_li[0][1] * N)
else:
result.append(package_li[0][0] * (N // 6))
else:
if package_li[0][0] * ((N // 6) + 1) > single_li[0][1] * N:
result.append(single_li[0][1] * N)
else:
result.append(package_li[0][0] * ((N // 6) + 1))
result.append(package_li[0][0] * (N // 6) + single_li[0][1] * (N % 6))
print(min(result))
💡소요시간 : 51m