백준 / 1092 / 배 / C++

비니01·2024년 8월 2일

백준

목록 보기
3/49

#include <bits/stdc++.h>

using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    //freopen("test.txt", "rt", stdin);
    int n, m;
    cin >> n;
    vector<int> wei(n);
    for (int i = 0; i < n; i++)
    {
        cin >> wei[i];
    }
    cin >> m;
    vector<int> box(m);
    for (int i = 0; i < m; i++)
    {
        cin >> box[i];
    }
    sort(wei.begin(), wei.end(), greater<>());
    sort(box.begin(), box.end(), greater<>());
    if (wei[0] < box[0])
    {
        cout << -1;
        return 0;
    }
    int craincount = wei.size();
    int boxcount = box.size();
    int ans = 0;
    while (1)
    {

        if (box[0] <= 0)
        {
            cout << ans;
            return 0;
        }
        int usecrainidx = 0;

        for (int targetboxidx = 0; targetboxidx < boxcount; targetboxidx++)
        {
            if (usecrainidx >= craincount)
            {
                break;
            }
            if (wei[usecrainidx] >= box[targetboxidx])
            {
                box[targetboxidx] -= wei[usecrainidx];
                usecrainidx++;
            }
        }

        sort(box.begin(), box.end(), greater<>());
        ans++;
    }
}

처음에는 문제를 잘못 읽어서 크레인의 무게제한만큼 박스의 수를 뺄 수 있다고 생각해서 코드를 짰고, 당연히 wa...

문제를 다시 읽어보니 각 박스는 하나이고 주어지는 숫자는 무게였다는 걸 알았고, sort 후 각 크레인에 대해서 무게제한 내에서 들 수 있는 가장 무거운 박스를 옮기는 시행을 box배열의 첫번째 값이 0 이하가 될 때까지 반복했다.

만약 첫 세팅하는 sort 후 크레인 배열의 0번인덱스 값이 박스 배열 0번인덱스 값보다 작다면 -1 출력.

profile
이것저것

0개의 댓글