Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

행복한 개구리

백준 21.12.07 2839번 - 설탕 배달 본문

Algorithm/BaekJoon

백준 21.12.07 2839번 - 설탕 배달

HappyFrog 2021. 12. 7. 17:11

n = int(input())
result = 0
while n >= 0:
    if n % 5 == 0:
        result += (n // 5)
        print(result)
        break
    n -= 3
    result += 1
else:
    print(-1)
  • 우선 5kg주머니로 담는게 주머니 수를 줄이는데 효과적이므로 분기를 먼저 작성해줍니다.
  • 분기의 조건 (n % 5)인 이유는 앞서 말했듯 5kg주머니를 많이 사용하는 것이 효과적이므로 5로 나눌 수 있는 n의 가장 큰 수를 찾기 위함입니다.
  • 하지만 5로 나누어지지 않는다며 3씩 빼며 주머니를 1씩 추가합니다.
    • 3씩 빼다보면 n이 5에 나누어질수도 아닐수도 있는데, 5에 나누어질 경우엔 if문의 print에서 주머니 갯수가 출력될 것이고
    • 5에 나누어지지 않을때 (1). 3으로 나누어진다면 (2). 3으로도 나누어지지 않는다면 이라는 두가지 분기가 존재합니다.
    • (1)번 분기점에서는 n-=3을 반복하다가 n이 0이 되었을 때 if n % 5 == 0 조건에 True가 되어 print를 하게됩니다.
    • 하지만 3으로 나누어지지 않는 (2)번 분기점에서는 나누어지지 않은 나머지(1 또는 2)를 n-=하는 과정에서 n은 0보다 작은 수가 되고 그에 따라 else문이 실행됩니다. 
    • 따라서 else문의 내용은 print(-1)입니다.
      • => 3kg, 5kg주머니를 사용해도 남는 설탕 존재 
  • 그리고 //연산자는 나는 몫의 소숫점을 버리고 정수만 취하는 연산자입니다.
    • math.floor과 같은 기능을 한다고 보면 될 것 같습니다.