
- 적은 봉지로 배달을 하기 위해 3보다는 5를 먼저 고려해준다. -> 예시로 15일 경우 5는 3봉지지만, 3은 5봉지로 3봉지가 더 적다
- 반복문을 빠져나올 수 있도록 조건을 만든다. -> 추가적으로 n이 음수가 되지 않도록 한다.
- 5로 나누어 떨어질때와 나누어 떨어지지 않을때의 경우의 수를 고려해 코드를 짠다.
- 메모리 : 30864 KB
- 시간 : 80 ms
n = int(input())
count = 0
while 1:
if n >= 3:
if n % 5 != 0:
n -= 3
count += 1
else:
count += n//5
n = 0
else:
break
if n == 0:
print(count)
else:
print(-1)
- 첫번째 코드는 너무 단순하게 생각했다.
-> 단순히 5로 나누고, 3으로 나누고 n이 0이면 출력하고 0이 아니면 -1을 출력하는 단순한 방식
- 그런데 여기서 주의할 점이 9일 경우에는 이 코드로는 -1이 출력되지만 실제로는 3이 출력되어야 맞는 코드가 된다.
즉 이 문제가 원하는 알고리즘이 아니다.
- 두번째 코드는 단순하게 실수했다. while문을 빠져나오는 조건으로 n을 고려했는데 코드에 n의 값을 변하게 하지 않았다.
(두번째 경우의 수에서)
n = int(input())
count = 0
count += n//5
n %= 5
count += n//3
n %= 3
if n == 0:
print(count)
else:
print(-1)
n = int(input())
count = 0
while 1:
if n >= 3:
if n % 5 != 0:
n -= 3
count += 1
else:
count += n//5
else:
break
if n == 0:
print(count)
else:
print(-1)