문제 보기: 2839번: 설탕 배달 (acmicpc.net)
문제
상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다.
상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다.
상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. (3 ≤ N ≤ 5000)
출력
상근이가 배달하는 봉지의 최소 개수를 출력한다. 만약, 정확하게 N킬로그램을 만들 수 없다면 -1을 출력한다.
새로 사용한 함수
qty = int(sys.stdin.readline().strip())
입력함수의 시간복잡도를 줄여주는 함수로
import sys를 해서 사용할수 있으며 개행문자가 포함되기에 .strip()함수를 이용하여야한다.
풀이 과정
코드1
1. 입력값을 받는다 이때 받는 것은 stdin.readline을 사용하였다.
2. 5보다 작을때의 경우는 모두 예외처리 한다. 1, 2, 4
3. 이후에는 반복되는 경우라고 생각했고 반복되는 종류는
- 5로 나누어 떨어지는 경우
- 입력값에 3 6 9 12를빼서 5로 나누어 떨어지는 경우
- 여기에 포함되지 않는 경우 로 나눠서 각자의 경우에 따라서 조건을 걸어줘서 처리합니다.
코드2
while 을 순회하면서 3씩 빼주고 5로 나누어봄 num이 -가 되면 -1을 반환
코드
코드1
# def delivery(qty):
import sys
qty = int(sys.stdin.readline().strip())
three_bag = 3
five_bag = 5
bag_qty = 0
# 3 6 9 12 15
# 5 10 15
if qty == 1 or qty == 2 or qty == 4:
bag_qty = -1
print(int(bag_qty))
elif qty == three_bag:
bag_qty = 1
print(int(bag_qty))
else:
if qty % five_bag == 0:
bag_qty = qty // five_bag
print(int(bag_qty))
elif (qty - (three_bag * 1)) % five_bag == 0:
bag_qty = (qty - (three_bag * 1)) / five_bag + 1
print(int(bag_qty))
elif (qty - (three_bag * 2)) % five_bag == 0:
bag_qty = (qty - (three_bag * 2)) / five_bag + 2
print(int(bag_qty))
elif (qty - (three_bag * 3)) % five_bag == 0:
bag_qty = (qty - (three_bag * 3)) / five_bag + 3
print(int(bag_qty))
elif (qty - (three_bag * 4)) % five_bag == 0 and qty - (three_bag * 4) >= 0:
bag_qty = (qty - (three_bag * 4)) / five_bag + 4
print(int(bag_qty))
else:
bag_qty = -1
print(int(bag_qty))
# tests = list(range(1, 101))
#
# for test in tests:
# delivery(test)
코드2
num = int(input())
count = 0
while num >= 0:
if num % 5 == 0:
count += int(num // 5)
print(count)
break
num -= 3
count += 1
else:
print(-1)
'Algorithm' 카테고리의 다른 글
[백준_1011] Fly me to the Alpha Centauri (0) | 2022.04.22 |
---|---|
[백준_4948] 베르트랑 공준 (0) | 2022.04.22 |
[백준_2480] 주사위 세개 (0) | 2022.04.21 |
[백준_1316] 그룹 단어 체커 (0) | 2022.04.21 |
[백준_2941] 크로아티아 알파벳 (0) | 2022.04.21 |