티스토리 뷰

 

[Python] 백준 알고리즘 온라인 저지 2839번 : 설탕 배달

 

Python3 코드

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)

 

 

Python3 코드 풀이

 

1. 작성한 코드에 대한 전체적인 풀이 내용

이 문제는 설탕의 무게를 나타내는 숫자 N이 입력되면 3 킬로그램과 5 킬로그램으로 된 봉지에 나누어 담아서 가장 적은 수의 봉지 개수를 출력하는 문제이다. 설탕을 나눠 담을 때 정확하게 n이 될 수 없는 경우에는 -1을 출력한다.

 

설탕의 봉지 개수를 찾는 코드는 while 반복문을 활용하였다. 5의 배수가 될 때까지 설탕의 무게에서 3씩 빼가는 방식으로 코드를 작성했고 딱 나누어 떨어지지 않을 때는 while - else문을 활용해서 -1을 출력하도록 문제를 풀었다. 

 

2. 코드 상단, 숫자를 입력받고 변수를 선언한다.

sugar = int(input())

bag = 0

입력받는 설탕의 무게에 해당하는 숫자는 sugar라는 변수에 선언하고 마지막에 출력해야 하는 값인 봉지의 수는 변수 bag에 0을 선언하였다. 이후 while - else 코드를 작성할 때 이 두 개의 변수로 수학 계산을 해서 문제를 풀었다. 

 

3. while 반복문에서 bag의 개수를 센다.

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

while문은 입력받은 sugar의 수가 0보다 같거나 클 때까지만 반복한다. 음수가 되면 설탕 봉지수가 입력받은 설탕 무게에 정확하게 나누어 떨어지지 않는 것이기 때문에 sugar 변수가 0보다 작아지면 아래 else문으로 내려가게 된다.

 

봉지의 개수를 최소화 하기 위해서 if조건식을 이용해서 5의 배수가 되면 while 봉지의 개수를 출력하고 while문이 끝나도록 하였다. 이때 bag의 수는 sugar변수를 5로 나눈 몫으로 계산하였다. 이유는 / 연산자로 나누기를 하면 실수로 출력되기 때문이다. 5의 배수이기 때문에 5로 나누면 나머지가 없지만 정수로 출력하기 위해 // 연산자로 몫을 구하도록 하였다. 

 

sugar 변수가 5의 배수가 아닐 때에는 5의 배수가 될 때까지 3을 빼고 bag의 개수는 1을 더하였다.

 

4. else문으로 -1을 출력한다.

else :
    print(-1)

위의 while문이 거짓으로 판정되는 경우, 즉 sugar가 0이 될 때까지 5의 배수로 나누어 떨어지지 않은 경우에는 else문 문장을 출력하도록 했다. 문제에서 정확하게 N킬로그램을 만들 수 없다면 -1을 출력하라고 했기 때문에 print함수를 이용해서 -1을 출력한다.

 

반응형
댓글
반응형