요구사항
- N kg 의 설탕봉지를 3kg 과 5kg 에 나누어 담는다.
- 최대한 적은 봉지로 나눌 것.
설계
- N >= 5 일경우 N -= 5를 해주고 count를 1증가시킨다.
- 그렇지 않을 경우 ( N < 5) N -= 3을 해준다.
- N <=0 을 때 while문을 break.
- N == 0: 이라면 print(count)
- 그 외 print(-1)
틀린 답안 예시
sugar_type = [5,3]
sugar_type.sort(reverse=True)
N = int(input())
count = 0
while True:
if N <= 0:
break
i = 0
if N >= sugar_type[i]:
N -= sugar_type[i]
count += 1
elif N < sugar_type[i]:
i += 1
N -= sugar_type[i]
count += 1
if N == 0:
print(count)
else:
print(-1)
- 위 소스 코드의 경우 예외가 있다.
- 예를 들어 6kg 은 3kg 2봉지로 나누어 가져갈 수 있지만, -1 을 출력하게 된다.
정답 답안 예시
N = int(input())
count = 0
while N >= 0:
if N % 5 == 0: # 5로 나누어 떨어질 때
count += N // 5
print(count)
break
N -= 3 # 5로 나눠지지 않으면 3을 빼고 카운트 증가
count += 1
else:
print(-1) # 정확히 0이 되지 않으면 -1 출력
- 큰 수부터 나누어 봐야 되는 건 맞지만, 그 순서는 상관이 없다는 걸 깨닫지 못했다.
- 예를 들어 18은 5로 나누어 떨어지지 않는다. 그럴 경우 N -= 3 을 해주고 다시 5로 나누어 보는 경우
- 3으로 먼저 빼주었지만, 설탕 봉지를 최대한 적게 담을 수 있다.
- 처음 로직 처럼 18 -5, 13 -5, 8 - 5, 3-3 되지만
- 6같은 경우 6-5, 1-3 이니 -1을 출력하게 된다.