본문 바로가기
Learning-log/Algorithm 문풀

백준(파이썬, python) - 2839번 설탕 배달(2022.11.07)

by why제곱 2022. 11. 7.

1) 문제

 

2) 풀이

import sys
n = int(sys.stdin.readline())

if n%5 == 0:
    num = n//5
elif (n%5) != 0:
    if (n%5) == 3:
        num = (n//5) + (n%5)//3
    elif n >5 and (n%5 ==1 or n%5 == 4):
        num = (n//5) -1 + (n%5+5)//3
    elif n >10 and n%5 == 2:
        num = (n//5) -2 + (n%5 +10)//3
    else:
        num = -1

print(num)

 

3) 문법 및 풀이과정

주어진 입력값을 3과 5의 합으로 구성하는데, 이 때 구성할 수 있는 숫자의 최소 개수를 구하라는 문제이다.

봉지의 수가 더 적기 위해서는 최대한 5kg의 봉지를 많이 사용하는 것이 좋다. 따라서 주어진 입력값을 먼저 5로 나눠보는데 이 때 나누어 떨어진다면 이보다 더 적은 봉지 수는 없기에 그대로 그 몫을 출력하면 된다. 

5로 나누어 떨어지지 않을 때가 문제인데, 나머지의 값 별로 생각해보자.

- 나머지가 3일 때 : 나머지를 3으로 나누어 그 몫만큼 3kg 봉지를 사용하면 된다.

- 나머지가 1일 때 : 나머지가 1이라고 해서 무조건 3과 5로 구성할 수 없는 수라고 생각해서는 안된다. 1+5=6이므로 3으로 나누어 떨어질 수 있기 때문이다. 즉, 5kg 봉지를 한 개를 덜 가져가고 나머지 1에 덜어낸 5kg을 더하여 총 6kg이 남으므로 3kg봉지를 2개 사용하면 5와 3만 사용한 합의 꼴로 나타낼 수 있다. 이 때, 5kg 봉지를 단 한 개라도 사용했어야 count했던 5kg 봉지들 수에서 1개를 덜어낼 수 있으므로 n>5일 때만 위 방법을 사용할 수 있음을 주의해야 한다.

- 나머지가 2일 때 : 나머지가 2일 때는 10 + 2 = 12로, 5kg봉지 2개를 덜어내고 나머지를 3kg봉지로 채울 수 있다. 이 때도 마찬가지로 n이 최소 10은 넘어야 덜어낼 5kg봉지 2개가 있을 것이므로 이를 조건에 넣어야 한다.

- 나머지가 4일 때 : 4+5=9임을 이용한다.(자세한 과정은 나머지가 1일 때와 동일하다.)

 

위에 각 상황별로 나눈 계산법을 if문을 활용해 코드를 작성한다.