Skip to content

Latest commit

 

History

History
83 lines (68 loc) · 1.95 KB

File metadata and controls

83 lines (68 loc) · 1.95 KB

백준 2839번 설탕 배달

image


코드 설명

  • 적은 봉지로 배달을 하기 위해 3보다는 5를 먼저 고려해준다. -> 예시로 15일 경우 5는 3봉지지만, 3은 5봉지로 3봉지가 더 적다
  • 반복문을 빠져나올 수 있도록 조건을 만든다. -> 추가적으로 n이 음수가 되지 않도록 한다.
  • 5로 나누어 떨어질때와 나누어 떨어지지 않을때의 경우의 수를 고려해 코드를 짠다.

소스코드

  • 메모리 : 30864 KB
  • 시간 : 80 ms
n = int(input())
count = 0

while 1:
    if n >= 3:
        if n % 5 != 0:
            n -= 3
            count += 1
        else:
            count += n//5
            n = 0
    else:
        break

if n == 0:
    print(count)
else:
    print(-1)

오답 노트

  • 첫번째 코드는 너무 단순하게 생각했다.
    -> 단순히 5로 나누고, 3으로 나누고 n이 0이면 출력하고 0이 아니면 -1을 출력하는 단순한 방식
  • 그런데 여기서 주의할 점이 9일 경우에는 이 코드로는 -1이 출력되지만 실제로는 3이 출력되어야 맞는 코드가 된다.
    즉 이 문제가 원하는 알고리즘이 아니다.
  • 두번째 코드는 단순하게 실수했다. while문을 빠져나오는 조건으로 n을 고려했는데 코드에 n의 값을 변하게 하지 않았다.
    (두번째 경우의 수에서)

오답 코드

n = int(input())
count = 0

count += n//5
n %= 5
count += n//3
n %= 3

if n == 0:
    print(count)
else:
    print(-1)

오답 코드

n = int(input())
count = 0

while 1:
    if n >= 3:
        if n % 5 != 0:
            n -= 3
            count += 1
        else:
            count += n//5
    else:
        break

if n == 0:
    print(count)
else:
    print(-1)