본문 바로가기
Algorithm/Python

백준 - 2839 -설탕 배달 - Python/수학백준 - 2839 -설탕 배달 - Python/기본 수학

by imagineer_jinny 2021. 3. 12.

2839번: 설탕 배달 (acmicpc.net)

 

2839번: 설탕 배달

상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그

www.acmicpc.net

문제

상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다.

상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다.

상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. (3 ≤ N ≤ 5000)

출력

상근이가 배달하는 봉지의 최소 개수를 출력한다. 만약, 정확하게 N킬로그램을 만들 수 없다면 -1을 출력한다.

 

풀이

잘못된 내 풀이 사고방식으로 예제입력5에서 11은 -1이 나와야 맞았다. 근데 5 + 3 +3 으로 3이된다는걸 팀원들이 이해시켜줬고 아 그럼 단순하게 몫/나머지로 존버하는게 아니라 뭔가 더 있다 까지 이해했고 답을 봤다. 그리고 sugar가 0이 될때까지 while문을 돌린다는걸 상상도 못했다. 왜 0을 만들어야하는가? 그래야 깔끔하게 끝나는지 안끝나는지 알고 -1을 하든가 말든가 하니까. 

sugar = int(input())

bag = 0
while sugar >= 0 :
    if sugar % 5 == 0 :  # 5의 배수이면
        bag += (sugar // 5)  # 5로 나눈 몫을 구해야 정수가 됨
        print(bag)
        break
    sugar -= 3  
    bag += 1  # 5의 배수가 될 때까지 설탕-3, 봉지+1
else :
    print(-1)

 

잘못된 풀이

if, else로 케이스분류해서 어떻게든 해볼라고 존버..

해서 답은 나올수도 있겠지만 보기만해도 가독성이 떨어지고 모든 경우의 수에 대해 생각하는게 힘들지 않을까?

하나 고치면 하나가 안됨! 빠른 손절!

N=int(input())
share5=N//5
rest5=N%5
share3=N//3
rest3=N%3


if (rest5==0)&(rest3==0):
  print(share5)
elif rest3==0:
  print(share3)
elif rest5==3:
  print(share5+1)
elif rest5>3:
  print(share5+1) 
else:
  print(-1)

댓글