공부/백준(C++) - 2022~

백준 2839번: 설탕 배달[C++]

상연 2022. 1. 14. 16:11

목차

https://www.acmicpc.net/problem/2839

 

2839번: 설탕 배달

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

www.acmicpc.net

코드

#include <iostream>
using namespace std;

int main() {
	int n;
	cin >> n;
	
	int a, b, min = 5000; // a is number of 3kg and b is number of 5kg
	
	for(a = 0; a * 5 <= n; a++){
		if((n - (5 * a)) % 3 == 0){
			b = (n - (5 * a)) / 3;
			min = a + b < min ? a + b : min; 
		}
	}
	if(min == 5000) min = -1;
	
	cout << min;
	
}

 

풀이

크게 특별한 생각없이 푼 문제였다.

3kg 와 5kg 짜리가 있으니, 가능한 모든 경우의 수를 대입해서 가장 적은 주머니를 갖는 경우를 찾았다.

5kg 짜리를 0개부터 시작해서 주어진 무개의 최대치까지 개수를 늘려보고

각 개수에서 3kg짜리가 딱 나누어지게 들어가는지를 확인해서 들어가면 그 때의 주머니 수를 확인한다.

그때의 주머니 수가 현재까지의 최저 주머니수보다 작다면 교체하고 아니라면 유지.

DP로도 풀 수 있고 Greedy로도 풀 수 있고 다른 분들의 해법을 보니 꽤 다양한 방법으로 접근이 가능한 문제인듯하다.