본문 바로가기

Algorithm/Sorting

(C++) - LeetCode (easy) 1710. Maximum Units on a Truck

반응형

https://leetcode.com/problems/maximum-units-on-a-truck/description/

정렬을 이용한 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

1. 박스 종류에 상관없이 총 개수만 truckSize이하이면 되므로 unit개수에 대한 내림차순으로 boxTypes를 정렬해줍니다.

2. static cmp함수로 sort함수의 3번째 인자에 넘겨 정렬 기준을 제시해 필요한 2차원 vector로 만들어줍니다.

3. 정답 변수 maxTotalUnits를 선언 후 0으로 초기화해줍니다.

📔 풀이과정

1. boxTypes의 원소를 순회하며 truckSize가 양수인 동안 다음을 수행합니다.

  1-1. 존재하는 box 개수가 truckSize보다 작다면 전부 적재 가능하므로 box 개수 * box당 적재가능 unit만큼 maxTotalUnits에 더합니다.

  1-2. 반대로 크다면 남은 truckSize만큼만 적재 가능하므로 truckSize * box당 적재가능 unit만큼 maxTotalUnits에 더합니다.

  1-3. truckSize를 적재한 box개수만큼 제합니다.

📔 정답 출력 | 반환

maxTotalUnits를 반환합니다.


📕 Code

📔 C++

class Solution {
public:
    static bool cmp (vector<int> a, vector <int> b) {
        if(a[1] == b[1]) return a[0] < b[0];
        return a[1] > b[1];
    }
    int maximumUnits(vector<vector<int>>& boxTypes, int truckSize) {
        sort(boxTypes.begin(), boxTypes.end(), cmp);
        int maxTotalUnits = 0;
        for(int i = 0; i < boxTypes.size() && truckSize > 0; i++) {
            if(boxTypes[i][0] < truckSize) {
                maxTotalUnits += boxTypes[i][0] * boxTypes[i][1];
            } else {
                maxTotalUnits += truckSize * boxTypes[i][1];
            }
            truckSize -= boxTypes[i][0];
        }
        return maxTotalUnits;
    }
};

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.