문제

설탕 배달 백준 2839번


리뷰

3kg 또는 5kg 봉지를 최소 개수로 활용해서 N kg을 맞추면 된다.

봉지의 개수가 최대일 때는 3kg 만 이용하는거니까 N / 3 개가 최대 개수가 된다.

즉, N =18kg 일 때, 18 / 3 = 6봉지가 최대 개수다.

그래서 3kg 을 0개 이용할 때 부터 6개 이용하는 경우까지 확인하도록 반복문을 만들었다.

int maxN = N/3;  

for(int i = 0; i <= maxN; i++ ){

    int cnt = i; // 봉지 개수 
    int sum = N-(i*3); // 3kg 곱해서 N에서 뺀 kg 

    if(  sum % 5 == 0){
        cnt += (sum/5);
        min_cnt = min(cnt, min_cnt);
    }
}

3kg 봉지를 몇개 이용하고, 나머지 kg은 sum이 된다.

만약, 5kg 봉지로 sum이 나누어 떨어진다면, 정확하게 N kg을 맞출 수 있는 경우다!

여기서 min_cnt를 갱신할 수 있다.


마지막에서 최소 봉지 개수 min_cnt 가 여전히 2e9로 초기값과 같다면, -1을 출력한다.

    if(min_cnt == 2e9) cout << -1;
    else cout << min_cnt;

맞은 코드

#include <iostream>
#include <cmath>
#include <algorithm> 
using namespace std;

int N;
int min_cnt = 2e9; // 최소 봉지 개수 

int main(void){

    scanf("%d", &N); // 목표 kg 

    int maxN = N/3;  

    for(int i = 0; i <= maxN; i++ ){

        int cnt = i; // 봉지 개수 
        int sum = N-(i*3); // 3kg 곱해서 N에서 뺀 kg 

        if( sum % 5 == 0){
            cnt += (sum/5);
            min_cnt = min(cnt, min_cnt);
        }
    }

    if(min_cnt == 2e9) cout << -1;
    else cout << min_cnt;

    return 0;
} 
728x90

'알고리즘 > 백준' 카테고리의 다른 글

N과 M (3),(4)  (0) 2020.10.20
N과 M(1), (2)  (0) 2020.10.20
분해합 백준 2231번 c++  (0) 2020.10.07
소트인사이드 백준 1427번  (0) 2020.10.02
수 정렬하기3 백준 10989번  (0) 2020.10.02

+ Recent posts