[백준] 2839번 설탕 배달 python

서성원·2025년 1월 2일
0

알고리즘

목록 보기
3/3
post-thumbnail

✨ 문제

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

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

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

입력

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

출력

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

💡 수도코드

5킬로그램의 봉지를 사용하는 게 최소 횟수를 만들어낸다고 생각했다. 5킬로그램을 사용하려면 먼저 n이 5로 나누어지는지 검사해야 한다.

5로 나누어지지 않는다면 3으로 나누어지는지 검사한다. 만약 3과 5 둘로도 나누어지지 않는다면 n의 값에 따라 달라진다.

n이 5보다 크거나 같다면 5를 뺀다. 그렇지 않다면 3을 뺀다. 만약 이때 else대신 elif n>=3를 한다면 n<3인 경우는 아무 작업도 하지 않기에 루프가 종료되지 않을 것이다.

위의 과정을 반복한 뒤 마지막에 n이 0이거나 2보다 작을 시에 무한루프를 종료한다. n이 0이라면 봉지의 수를 출력하고, 아닌 경우엔 -1을 출력하면 된다.

🧑🏻‍💻 코드

n = int(input())

cnt = 0 
while True:
  if n%5 == 0:
    n -= 5
    cnt += 1
  elif n%3 == 0:
    n-=3
    cnt+=1
  else:
    if n>=5:
      n-=5
      cnt+=1
    else:
      n-=3
      cnt+=1
      
  if n==0:
    break
  elif n<2:
    break

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

2년 전에 풀었던 문제라 거의 기억이 나지 않았다. 다행히 20분만에 풀었고 시간 또한 단축되었음을 보고 뿌듯했다.

 
profile
FrontEnd Developer

0개의 댓글

관련 채용 정보