본문 바로가기
작업/Problem Solving

백준 2839(설탕 배달) 파이썬(python) 해결

728x90

문제

 

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

 


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


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

입력

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

출력

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

 

 

 


 

코드

#백준 2839 
value = int(input())

cnt = 0

if value%5 == 0: 
    print(value//5)
else:
    while(True):
        value = value - 3
        cnt += 1

        if value%5 ==0:
            cnt += value//5
            print(cnt)
            break
        elif value < 0 : #값이 3, 5로 처리되지 않으면
            print(-1)
            break

 

설탕의 봉지 개수를 최소로 줄이기 위해서는 5kg을 최대한 사용해야 합니다.
그래서 5의 배수가 되는 무게는 5로 한 번에 나누어 처리할 수 있도록 했습니다.

 

그 외의 것들은 3kg을 한 번 이상 사용해야 하거나 3kg과 5kg 조합으로 만들 수 없는 것입니다.


3kg을 한 번 이상 사용하는 경우
총 무게에 3kg을 한 번 빼고 봉지의 수 1 증가합니다.
이후 5kg으로 처리가 가능한지(5의 배수가 되는지) 확인한 뒤, 맞다면 5kg 봉지를 모두 사용합니다.

 

 

아직 5kg으로 모두 처리되는지 모르겠다면(5의 배수가 아니라면)
총 무게가 0 미만인지 확인합니다. 0 미만까지 되었다면 결국 3kg이나 5kg으로 처리 못하는 것입니다.


해당 조건들이 모두 아니라면 다시 처음으로 돌아가 3kg 봉지 하나를 사용합니다.


 


해당 무한루프가 끝나는 지점에서는
총 무게를 3kg이나 5kg의 조합으로 처리가 되어 사용한 봉지의 개수가 출력되거나,
조합으로 처리할 수 없어서 봉지의 개수를 구하지 못해 -1이 출력되는 2가지의 결과가 나옵니다.

 

-끝-

 

 

 

 

 

 

728x90