알고리즘/문제풀이
[백준] 2839번 설탕 배달 - 파이썬(Python)
SeongOnion
2021. 1. 14. 12:54
728x90
문제 (링크)
https://www.acmicpc.net/problem/2839
2839번: 설탕 배달
상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그
www.acmicpc.net
나의 풀이
n = int(input())
result = 0
while n % 5 != 0: #
n -= 3
if n < 0:
result = -1
break
result += 1
result += (n // 5) # n < 0일 때도 이 코드를 거쳐가서 오류 발생.
print(result)
n이 5의 배수가 될때까지 (while n%5 != 0) n에서 3을 빼주고 봉지 개수를 +1 해준다.
그러다가, n이 0보다 작아질 때는 정확히 n킬로그램을 만들 수 없는 것이므로 result = -1로 바꿔준다.
이렇게 풀어놓고 계속 통과하지 못해 뭐가 틀린거냐고 혼자 짜증나다가 Repl에서 입력된 테스트 케이스를 하나하나 쳐보던 중 n이 4일 때 -1이 아닌 -2가 출력되는 것을 확인할 수 있었다.
Visualize Python에서 해당 과정을 지켜보니 n <0 일때도 while문을 빠져나와 11번째 코드를 거쳐가 해당 오류가 발생한 것이었다.
요즘 알고리즘 공부할 때 계속 def로 함수를 정의하는 게 익숙해진 탓에 return을 쓴 것마냥 코드를 짰다.
혼자 짜증냈던 순간이 부끄러워졌던 순간이었다.
수정
n = int(input())
def sugar(n):
result = 0
while n % 5 != 0:
n -= 3
if n < 0:
return -1
result += 1
result += (n // 5)
return result
print(sugar(n))
그냥 해당 부분을 def로 정의해 return을 써주는 것으로 수정해 통과할 수 있었다.