백준 알고리즘 2839 파이썬

Lee·2022년 9월 19일
0

백준

목록 보기
18/20

문제

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

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

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

입력

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

출력

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

n = int(input())
count = 0

while n >= 0:
    if n % 5 == 0:
        count += n // 5
        print(count)
        break
    n -= 3
    count += 1
else:
    print(-1)

문제의 핵심은 3킬로,5키로 그램으로된 봉지의 갯수를 최소화 하는 것이다.
5의 배수가 될 때까지 설탕의 무게에서 3씩 빼때마다 count가 1씩 증가하고 만약 변수 n이 5의 배수가 된다면 if문안에 있는 print문이 작동한다.
그 외에 나누어 떨어지지 않거나 다른 문제가 생겼을때에는 -1이 출력되게 설정 했다.

실패코드

N = int(input())

if (N % 3 == 0):
    print(N // 3)
elif (N % 5 == 0):
    print(N // 5)
else:
    print(-1)

[문제점]

다른 경우의 상황?을 살피지 못하였고(나누서 갯수 나오는 거에 만 신경을 쓰고, 나누지 못할때 혹은 더욱 적게 들수있게 만들기 등), 문제에 대한 이해도 부족했다.
그리고 조건문을 사용한건 좋았지만, 유도리 있게 코드 작성을 하지 못하였다.

profile
❝이 세상에는 위대한 진실이 하나 있어. 무언가를 온 마음을 다해 원한다면, 반드시 그렇게 된다는거야. 무언가를 바라는 마음은 곧 우주의 마음으로부터 비롯된 것이기 때문이지. 그리고 그것을 실현하는게 이 땅에서 자네가 맡은 임무라네❞ -파울로 코엘료 ‘연금술사’中-

0개의 댓글