Koala - 16기/코딩테스트 기초 스터디

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

joo-nick 2024. 9. 29. 21:49

문제

 

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

정수 N을 입력 받아 배달하는 봉지의 최소 개수를 구하는 문제이다.
정수 N을 입력받고 봉지의 최소 개수를 출력한다. 이 때 정확하게 N을 만들 수 없다면 -1을 출력한다.


Algorithm

1. 정수 N을 입력을 받아서 N킬로그램을 만들 수 있을 때와 없을 때로 구분한다.

2. 5킬로그램의 설탕 봉지를 가능한 많이 사용하는 것이 최소 개수가 될 수 있다.

3. N의 경우는 5킬로그램의 설탕 봉지만 쓰는 경우와 3킬로그램의 설탕 봉지만 쓰는 경우 2가지 다 쓰는 경우 불가능한 경우 총 4가지가 존재한다.

4. while문을 통해서 불가능한 경우와 나머지 3가지 경우를 분리하고, 5의 배수일 때를 확인하는 조건문을 통해서 최소 개수를 얻을 수 있다.

5. 5의 배수가 아니라면 3킬로그램의 설탕 봉지를 사용해서 3을 뺀후 다시 반복문을 통해서 최소 개수를 얻을 수 있다.


 

 

Code

#include<iostream>
using namespace std;

int main(){
    int n;
    cin >> n;
    int a = 0;
	
    while(n >= 0){
    
    	//N이 5의 배수인지 확인
        if(n % 5 == 0){
            a += (n/5);
            cout << a << endl;
            return 0;
        }
        
        //N이 5의 배수가 아니면 3을 빼서 다시 반복문 진행
        n -= 3;
        a++;
    }
    
    //N이 불가능한 값이면 반복문을 돌다 음수가 되기 때문에 -1 출력
    cout << -1 << endl;
}