/**
* @param {number[][]} boxTypes
* @param {number} truckSize
* @return {number}
*/
var maximumUnits = function (boxTypes, truckSize) {
let result = 0;
let sum = 0;
boxTypes.sort((a, b) => b[1] - a[1]);
for (let [x, y] of boxTypes) {
sum += x;
result += x * y;
if (sum > truckSize) {
let remain = sum - truckSize;
result -= remain * y;
break;
}
}
return result;
};
// ๋ค๋ฅธ ์ฌ๋์ ํ์ด
var maximumUnits = function (boxTypes, truckSize) {
boxTypes.sort((a, b) => b[1] - a[1]); // ๋ฐ์ค์ per units๋ฅผ ๊ธฐ์ค์ผ๋ก ํฐ ์์๋๋ก ์ ๋ ฌ
let ans = 0;
for (let [x, y] of boxTypes) { // 2์ฐจ์ ๋ฐฐ์ด์ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๊ตฌ์กฐ๋ถํด ํ ๋น์ ์ ์ฉํ๋ฉด ๋ ๊น๋ํด์ง๋ค.
if (!truckSize) break; // truckSize๊ฐ ์์ ๊ฒฝ์ฐ ๋ฐ๋ณต๋ฌธ ํ์ถ
let count = Math.min(x, truckSize); // loop์ ๋ ๋๋ง๋ค truckSize์์ count๋ฅผ ๋นผ์ฃผ๊ธฐ ๋๋ฌธ์ ๋ง์ง๋ง loop์๋ x๊ฐ ์๋ truckSize๊ฐ count์ ๋ด๊ธฐ๊ฒ ๋๋ค.
ans += count * y;
truckSize -= count;
}
return ans;
};
let boxTypes = [
[5, 10],
[2, 5],
[4, 7],
[3, 9],
];
let truckSize = 10;
maximumUnits(boxTypes, truckSize);
Greedy๋ก ํธ๋ ๊ธฐ์ด ์ ํ์ ๋ฌธ์ ๋ค. ์๋ ๋ด๊ฐ ์ฒ์ ํผ ๋ฐฉ์์ด๊ณ , ์๋๋ ๋ค๋ฅธ ์ฌ๋์ ํ์ด๋ฅผ ๋ด๊ฐ ์ฝ๊ฐ ๋ณํํ ๋ฐฉ์์ด๋ค. ์ค๋ช
์ ์์ ์ฃผ์๊ณผ ์๋ ๊ทธ๋ฆผ์ผ๋ก ๋์ฒดํ๊ฒ ๋ค.
์์ , ์ง์ ์ ํ์ํฉ๋๋ค!
https://leetcode.com/problems/maximum-units-on-a-truck/