본문 바로가기

백준/실버

[백준 1817번] 짐 챙기는 숍 (C++)

문제링크 : https://www.acmicpc.net/problem/1817

 

1817번: 짐 챙기는 숌

첫째 줄에 책의 개수 N과 박스에 넣을 수 있는 최대 무게 M이 주어진다. N은 0보다 크거나 같고 50보다 작거나 같은 정수이고, M은 1,000보다 작거나 같은 자연수이다. N이 0보다 큰 경우 둘째 줄에 책

www.acmicpc.net

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define MAX 987654321
#define pii pair <int, int>

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int N, M;
    cin >> N >> M;

    int tmp = M;

    int weight, cnt = 1;

    for(int i=0; i<N; i++)
    {
        cin >> weight;
        if(tmp - weight < 0) //새박스가 필요해지면
        {
            cnt++;
            tmp = M;         //새박스 할당
        }
        tmp-=weight;
    }

    cout << ((N==0) ? 0 : cnt); //N이 0인 경우 예외처리

    return 0;
}

단순한 그리디 알고리즘 문제이다.

N이 0일때를 주의해야한다.