설탕 배달
import sys
def main():
input = sys.stdin.readline
inf = float("inf")
n = int(input())
min_count = inf
for count_3 in range(n // 3 + 1):
for count_5 in range(n // 5 + 1):
if count_3 * 3 + count_5 * 5 == n:
count = count_3 + count_5
min_count = min(min_count, count)
if min_count == inf:
print(-1)
else:
print(min_count)
main()
import sys
def main():
input = sys.stdin.readline
n = int(input())
for count_5 in range(n // 5, -1, -1):
rest = n - count_5 * 5
if rest % 3 == 0:
count_3 = rest // 3
print(count_5 + count_3)
break
else:
print(-1)
main()
정확하게 $N$ 킬로그램을 만들 수 있을 때, 필요한 $3$ 킬로그램 봉지와 $5$ 킬로그램 봉지의 개수는 각각 $N / 3$과 $N / 5$을 넘지 않습니다. 따라서 이 범위 내의 모든 봉지 개수 조합에 대해 합이 $N$이 되는 경우를 찾아가며 모든 경우에서 최소 봉지 개수를 찾으면 됩니다. $N \le 5000$이고 가장 많이 실행되는 경우 약 $N^2 / 15$번의 연산을 수행하므로 시간제한 내에 충분히 종료됩니다.
두 번째 코드는 $5$ 킬로그램 봉지의 개수를 먼저 정하고 남은 무게를 $3$ 킬로그램 봉지로 채울 수 있는지 검사하는 방식으로 구현하였습니다. 전체 개수를 줄이려면 $5$ 킬로그램 봉지를 최대한 많이 사용하는 것이 유리하므로 $N / 5$부터 $0$까지 줄여가며 확인합니다. 최대 연산 횟수를 약 $N / 5$으로 줄일 수 있습니다.
댓글