๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ/LeetCode

[LeetCode] Maximum Units On A Truck

๋ฌธ์ œ๋งํฌ

 

Maximum Units on a Truck - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

boxTypes์—๋Š” [๋ฐ•์Šค ๊ฐฏ์ˆ˜, ๋ฐ•์Šค๋‹น ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ฑด์˜ ์ˆ˜]๊ฐ€ ๋“ค์–ด์žˆ๊ณ 
truckSize์—๋Š” ์ตœ๋Œ€ ์‹ค์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ•์Šค์˜ ๊ฐฏ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

์ด๋•Œ ํŠธ๋Ÿญ์— ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฌผ๊ฑด์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ผ๋Š” ๋ฌธ์ œ์ด๋‹ค.

์ ‘๊ทผ ๋ฐฉ๋ฒ•

์ตœ๋Œ€ ์‹ค์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ฑด์€ "๋ฐ•์Šค ๋‹น ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ฑด์˜ ์ˆ˜"๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ๋ฐ•์Šค๋“ค์„ ์šฐ์„ ์œผ๋กœ ๋‹ด๋Š” ๊ฒƒ ์ด๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ฐ•์Šค์˜ ๋ฌผ๊ฑด์˜ ์ˆ˜๊ฐ€ ๋งŽ์€ ์ˆœ์œผ๋กœ ๋‚ด๋ฆผ์ฐจ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค. 
boxTypes.sort((a,b) => b[1] - a[1])โ€‹

๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ ํŠธ๋Ÿญ์— ๋“ค์–ด์žˆ๋Š” ๋ฐ•์Šค์˜ ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋Š” boxCnt ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜์—ฌ
1. ํ˜„์žฌ ํŠธ๋Ÿญ์˜ ๋ฐ•์Šค + ์•ž์œผ๋กœ ๋“ค์–ด๊ฐˆ ๋ฐ•์Šค < ํŠธ๋Ÿญ์— ์‹ค์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ•์Šค ์ˆ˜
2. ํ˜„์žฌ ํŠธ๋Ÿญ์˜ ๋ฐ•์Šค + ์•ž์œผ๋กœ ๋“ค์–ด๊ฐˆ ๋ฐ•์Šค >= ํŠธ๋Ÿญ์— ์‹ค์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ•์Šค ์ˆ˜

๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ๋ฅผ ์กฐ๊ฑด๋ฌธ์œผ๋กœ ๋งŒ๋“ค์–ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.
if((boxCnt + box) < truckSize){
  output += box * items;
  boxCnt += box;
}else{
  output += (truckSize - boxCnt) * items;
  boxCnt += (truckSize - boxCnt);
  return false;
}โ€‹


์ฃผ์˜์‚ฌํ•ญ

forEach๋ฌธ์€ break๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. 
๋•Œ๋ฌธ์— ์œ ์‚ฌํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ return false;๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

/**
 * @param {number[][]} boxTypes
 * @param {number} truckSize
 * @return {number}
 */
 var maximumUnits = function(boxTypes, truckSize) {
  let output = 0;
  let boxCnt = 0;
  
  boxTypes.sort((a,b) => b[1] - a[1])

  boxTypes.forEach(boxType => {
      let [box, items] = boxType;
      if((boxCnt + box) < truckSize){
          output += box * items;
          boxCnt += box;
      }else{
          output += (truckSize - boxCnt) * items;
          boxCnt += (truckSize - boxCnt);
          return false;
      }
  })
  
  return output;   
};