KEEP GOING
백준 2839번: 설탕배달 (Dynamic Programming) 본문
반응형
https://www.acmicpc.net/problem/2839
2839번: 설탕 배달
상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그
www.acmicpc.net
1. 코드
import sys
box = [-1]*5001
box[3] = 1
box[5] = 1
n = int(sys.stdin.readline())
for i in range(6,n+1):
if box[i-3] != -1:
box[i] = box[i-3] + 1
if box[i-5] != -1:
box[i] = box[i-5] + 1
print(box[n])
처음에 틀린 이유는 if 문에서 if i%3 == 0 과 같은 방식으로 3과 5로 나누어 떨어지는가에 대해서 접근하려고 했기 때문이다. 8, 11, 13같은 5 혹은 3 만으로 나누어 떨어지지 않는 값에 대해서 처리해야 하므로 이과 같은 방식으로 구현하면 된다. min() 함수를 사용하지 않아도 되는 이유는 5에 대해 접근하는 if 문을 가장 아래에 적어주어서이다. 무겁지 않은 배달을 위해서는 최대한 5를 많이 써야한다.
2. 더 짧은 코드
import sys
cnt = 0
n = int(sys.stdin.readline())
while True:
if n%5 == 0:
cnt += n//5
break
else:
n-=3
cnt+=1
if n<0:
print(-1)
break
if n>=0:
print(cnt)
동적 프로그래밍 구현 없이 while문을 사용한다.
반응형
'code review > dynamic programming' 카테고리의 다른 글
[python] 백준 1149번 : RGB 거리 (DP) (0) | 2022.03.03 |
---|---|
백준 1463번: 1로 만들기 (Dynamic Programming) (0) | 2021.11.16 |
Comments