백준 - 설탕 배달(Python)

연수·2024년 4월 10일

코딩테스트

목록 보기
8/10

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

내가 생각한 모든 경우의 수는 총 4가지였고 처음에는 조건문을 활용해 모든 경우의 수를 처리하려고 했다.

  • 5로 한번에 나눠지는 경우
  • 5로 1차 나누고 나머지가 3으로 나눠지는 경우
  • 위의 경우가 적용 안되고 3으로 한번에 나눠지는 경우
  • 모두 해당 안되는 경우

하지만 모두 해당 안되는 경우에 대한 예외처리를 제대로 하지 못했고 그 다음으로 생각한건 큰 숫자인 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를 사용할 수 있다는 걸 알게되었다.

반복문 - else

  • for-else
  • while-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는 출력되지 않은 채 반복문은 종료된다


그리디 혹은 다이나믹 프로그래밍을 활용해서 푸는 문제인데 경우의 수를 간결하게 정리할 수 있는 코드(아이디어)를 생각해내지 못한게 아쉽다.
항상 알고리즘 공부를 하면서 느끼는거지만 모든 경우의 수를 간결한 코드로 옮길 수 있도록 생각하는 연습이 필요한 것 같다.

profile
하고 싶은건 다 하자 👻

0개의 댓글