🔗 Link
https://www.acmicpc.net/problem/2839

내가 생각한 모든 경우의 수는 총 4가지였고 처음에는 조건문을 활용해 모든 경우의 수를 처리하려고 했다.
하지만 모두 해당 안되는 경우에 대한 예외처리를 제대로 하지 못했고 그 다음으로 생각한건 큰 숫자인 5부터 하나씩 빼고 3으로 나누는 반복문을 생각했다.
이 경우에도 5부터 빼기 시작하면 위 경우들과 마찬가지로 5로 1차 나누고 나머지를 3으로 나누는 것과 동일한 결과가 나왔다.
여기까지만 생각하고 반대로 3부터 빼면서 나누는 방법을 생각하지 못해 결국 다른 분들의 코드를 참고해 코드를 작성하였다.
💡 5가 아닌 3으로 하나씩 빼면서 5의 배수면 총 count를 반환하는 방법
num = int(input())
count = 0
while num >= 0:
if num % 5 == 0:
count += (num//5)
print(count)
break
num -= 3
count += 1
else:
print(-1)
해당 코드를 작성하며 반복문에도 else를 사용할 수 있다는 걸 알게되었다.
for문과 while문 동일하게
# for 문
for i in range(4):
print(i)
else:
print('end')
# while 문
while num >= 0:
print(num-1)
else:
print('end')
위와 같이 else를 사용한다면 반복문이 모두 끝난 후 else가 실행된다.
하지만 반복문 중간에 break를 통해 반복문에서 나오게 된다면
while num >= 0:
if num % 5 == 0:
print('zero')
break
else:
print('end')
위 코드에선 결과적으로 zero만 출력되고 end는 출력되지 않은 채 반복문은 종료된다
그리디 혹은 다이나믹 프로그래밍을 활용해서 푸는 문제인데 경우의 수를 간결하게 정리할 수 있는 코드(아이디어)를 생각해내지 못한게 아쉽다.
항상 알고리즘 공부를 하면서 느끼는거지만 모든 경우의 수를 간결한 코드로 옮길 수 있도록 생각하는 연습이 필요한 것 같다.