BOJ 2839 : 설탕배달
문제
상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다.
상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다.
상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오.
풀이
import sys
# 그리디 알고리즘
if __name__ == '__main__':
N = int(sys.stdin.readline())
count = 0
while N>=0:
if N % 5 == 0:
count += N // 5
print(count)
break
N -= 3
count += 1
else:
print(-1)
처음으로 문제를 못 풀어서 다른 사람들이 푼 것을 참고했다. 그리디 알고리즘(https://hanamon.kr/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%ED%83%90%EC%9A%95%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-greedy-algorithm/) 을 통해서 '선택의 순간마다 가장 최적의 해를 찾는 방법'으로 해를 구해본다고 한다.
- 기계, 전기전자 등의 설계,품질 기법으로 많이 쓰이는 실험계획법(Degree of Experiment) 혹은 다구찌 기법과 비슷한 컴퓨터 공학 최적화 알고리즘 같다.
[알고리즘] 탐욕 알고리즘(Greedy Algorithm) - 하나몬
❗️탐욕 알고리즘(Greedy Algorithm)이란? Greedy는 ‘탐욕스러운, 욕심 많은’ 이란 뜻이다. 탐욕 알고리즘은 말 그대로 선택의 순간마다 당장 눈앞에 보이는 최적의 상황만을 쫓아 최종적인 해답에
hanamon.kr
문제를 이해하지 못한 것은 아닌데, 쉽게 풀지 못했다. 풀이를 보고 나서는 어렵지는 않았고, 이런 문제 유형은 어떻게 해결해야 하는 지에 대해서 하나 더 배웠다. 실생활에서도 참고 해야지..
1. 무한 반복문에서 5가 더 큰 수이므로, 당연히 큰 수로 나눴을 때, 나누어 떨어지는 것을 제외하고는 반복 실험이다.
2. 이 반복 실험은, 3씩 차감하면서 그게 큰 수로 나누어 떨어지는 상황을 제외하고 차감 반복을 할 때는 count를 하나 씩 증대 시킨다.
3. 나누어 떨어지지 않고 while이 끝날 경우에는 -1을 출력하게 한다.
(python 에 while ~ else 문이 존재한다 것도 오늘 처음 알았다..