https://www.acmicpc.net/problem/2839
2839번: 설탕 배달
상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그
www.acmicpc.net
문제
상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다.
상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다.
상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. (3 ≤ N ≤ 5000)
출력
상근이가 배달하는 봉지의 최소 개수를 출력한다. 만약, 정확하게 N킬로그램을 만들 수 없다면 -1을 출력한다.
내 풀이
3*5 = 15 이므로 3킬로 봉지는 5개 이상 나오면 그냥 5 kilo 3개로 바뀜
그래서 처음에는 15를 기준으로 나눠서 처리해봤다.
15이하는 그냥 경우의 수에 따라 나누어서 처리했다.
15 초과는 3킬로가 5개 이상이되면 무조건 5킬로 3개로 바꾸는게 더 최소값이기 때문에
3킬로는 [0,1,2,3,4]개 까지만 반복문을 돌려 처리하고
나머지를 5로 나누어지면 최소 조건이 된다.
n_kilo = int(input())
ans = []
if n_kilo > 15:
for i in range(5): # 3은 어차피 최대 4 ( 3*4 =12) 까지 밖에 안나옴
cal = n_kilo - (3 * i)
if cal % 5 == 0:
j = cal // 5
ans.append(i + j)
else:
pass
else:
if n_kilo in [3,6,9,12]:
ans.append(n_kilo//3)
elif n_kilo in [5,10,15]:
ans.append(n_kilo//5)
elif n_kilo in [8, 11]:
n_kilo -= 5
ans.append(n_kilo//3+1)
elif n_kilo == 13: # 13 = 5 + 5 + 3
ans.append(3)
elif n_kilo == 14: # 14 = 5 + 3 + 3 + 3
ans.append(4)
else:
ans.append(-1) # 4, 7 불가능
print(min(ans))
이렇게 풀어서 정답이 나오긴 했는데
풀다보니 그냥 for문으로 처리가 가능해 보였다.
3의 배수는 끝자리가 3 6 9 2 5 8 1 4 7 0 으로 모든 수를 커버 0부터 9까지 모두 처리가 가능하기 때문에
3과 5의 조합으로 모든 수가 커버가 되었다.
예외가 있다면 한 자리 자연수인데
N은 3부터라는 조건이 있고, 3 5 6 9 는 3과 5의 배수, 조합으로 8(3+5)도 가능하므로
4와 7만 예외(-1)이고 남은 수는 모두 3과 5의 조합으로 모두 처리가 가능하다는 결론이 나왔다.
최종코드
# 31120kb 40ms
n_kilo = int(input())
ans = []
if n_kilo == 4 or n_kilo == 7: # -1 나오는 경우만 제외
ans.append(-1)
else:
for i in range(5): # 3은 어차피 최대 4 (3*4 =12) 까지 밖에 안나옴
cal = n_kilo - (3 * i)
if cal % 5 == 0:
j = cal // 5
ans.append(i + j)
print(min(ans))
'파이썬 알고리즘 연습' 카테고리의 다른 글
[Python | 백준 10773번] 제로 (0) | 2024.03.18 |
---|---|
[Python | 백준 5568번] 카드 놓기 (0) | 2024.03.18 |
[Python | 백준 9012번] 괄호 (0) | 2024.03.14 |
[Python | 백준 1205번] 등수 구하기 (0) | 2024.03.12 |
[Python | 백준 2217번] 로프 (0) | 2024.03.12 |