본문 바로가기

백준 write-up/정렬 & 그리디

[백준] 설탕 배달 : 2839번 - Python

728x90
반응형

https://www.acmicpc.net/problem/2839

 

2839번: 설탕 배달

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

www.acmicpc.net

 

 

 

문제의 접근 방법

 

- 설탕을 정확히 N킬로그램 배달해야 함.

- N값이 5로 나누어 떨어진다면 그대로 계산해서 출력하면 되지만, 나누어 떨어지지 않을 경우에는 3킬로그램 봉지를 사용해야 함.

- 설탕이(N) 5의 배수가 될 때까지 3킬로그램 봉지를 사용하면서 이 과정을 반복해야 함.

- 최소 개수의 봉지를 사용하기 위해 더 큰 수인 5를 기준으로 5의 배수를 만들려고 함.

 

 

 

내가 막혔던 부분

 

최소 개수를 구하기 위해서는 더 큰 값인 5킬로그램 봉지를 많이 사용해야 할 것 같은데 '9'와 같이 3으로 나누어 떨어지는 수 같은 경우에는 5킬로그램 봉지를 먼저 사용하는 대신 3킬로그램 봉지 3개를 사용해야 했다. 이 때, 어떤 알고리즘을 통해 판별할 수 있는지 고민하는 데에서 막혔다.

 

 

 

문제 풀이 방법

 

설탕 N킬로그램을 입력 받기 -> 만약 N값이 5로 나누어 떨어진다면 N을 5로 나눈 몫을 count에 누적하여 저장해준 후 그 값을 출력하고 반복문 벗어나기 -> 5의 배수가 아니라면 3킬로그램 봉지를 사용해야하는 것이므로 N값이 3만큼 줄어들고 count는 1 증가시키기 -> 위 과정을 5의 배수가 될 때까지 반복하다가 N의 값이 0보다 작다면 "-1"을 출력해주기!

 

 

 

소스코드

N = int(input())

count = 0

while True:
    if N % 5 == 0:
        count += N // 5
        print(count)
        break
    N -= 3
    count += 1
    if N < 0:
        print("-1")
        break
728x90
반응형