본문 바로가기
백준

백준 2839번[c언어][c++] : 설탕배달

by 핫동경 2022. 3. 15.
반응형

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

 

2839번: 설탕 배달

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

www.acmicpc.net

백준 2839번


풀이

○ 5킬로의 봉지와 3킬로의 봉지가 있다. 봉지를 최소한으로 쓰려면 어덯게 해야할까?

    정답은 3킬로의 봉지를 최소한으로 쓰면 된다.

 

○ 만약 입력한 수가 5로 나누었을 때 나머지가 0이라면 3킬로의 봉투를 쓸 필요가 없으니 입력한 수/5

    만큼의 봉투가 정답이 된다.

 

○ 입력한 수가 5로 나누어 떨이지지 않는다면 어덯게 해야할까? 3의 봉투를 최소한으로 써야된다는 것을

    생각하면 된다. 입력한 수-(3의배수)을 해보고 5로나누어떨어지는지 확인한다. 

    또한 (입력한 수) - (3의배수)가 0이라면 입력수는 3의 배수이다.

    i) 입력 수 -3 이 5로 나누어 떨이지는가?  안떨어진다면

   ii) 입력 수 -6 이 5로 나누어 떨어지는가?  안떨어진다면

  iii) 입력 수 -9 이 5로 나누어 떨어지는가?   ... (반복)

 

○ 위 반복을 계속하다가 (입력한 수) - (3의배수) 가 3보다 작으면 어덯게 될까? 5와3 봉투로는 정확히

    담을 수 없는 양이된다. 그러므로 -1을 출력하면 된다. 코드를 통해 확인해보자

 

 

    ○ C언어 풀이

#include<stdio.h>

int main() {
	int n;
	scanf("%d", &n);

	int x, y;
	int number
	int i = 1;
	int answer;
	while (1) {
		number = n - (3 * i);
        
        if (n % 5 == 0) {
			answer = n / 5;
			break;
		}
        
		if (number % 5 == 0||number==0) {  //5로 나누어 떨어지거나 number가 0이면 3의배수임
			answer = number / 5 + i;
			break;
		}
		
		if (number <= 2) {
			answer = -1;
			break;
		}
		i++;
	}
	printf("%d", answer);
}

 

 

   ○ C++ 풀이

#include <iostream>
using namespace std;
int main() {
	int n;
	cin >> n;

	int x, y;
	int number;
	int i = 1;
	int answer;
	while (1) {
		number = n - (3 * i);
		if (n % 5 == 0) {
			answer = n / 5;
			break;
		}
		if (number % 5 == 0 || number == 0) {
			answer = number / 5 + i;
			break;
		}
		
		if (number <= 2) {
			answer = -1;
			break;
		}
		i++;
	}
	cout << answer;
}
반응형

댓글