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

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

[LeetCode] Maximum Bags With Full Capacity Of Rocks

๋ฌธ์ œ๋งํฌ

 

Maximum Bags With Full Capacity of Rocks - 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

 

๋Œ์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์šฉ๋Ÿ‰ : capacity
ํ˜„์žฌ ๋‹ด๊ฒจ์žˆ๋Š” ๋Œ : rocks
์ถ”๊ฐ€๋กœ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๋Œ์˜ ๊ฐœ์ˆ˜ : additionalRocks

์œ„์˜ ๊ฐ’๋“ค์ด ์ฃผ์–ด์กŒ์„๋•Œ "ํ˜„์žฌ ๋‹ด๊ฒจ์žˆ๋Š” ๋Œ"์—์„œ ๋Œ์„ ๋” ์ถ”๊ฐ€ํ•ด์„œ "๋Œ์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์šฉ๋Ÿ‰"์„ ์ตœ๋Œ€ํ•œ ์ฑ„์šฐ๊ณ , ์ด๋•Œ ๋ชจ๋‘ ์ฑ„์›Œ์ง„ capacity์˜ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜์—ฌ๋ผ.

[2,3,4,5]๋ผ๋Š” capacity๊ฐ€ ์ฃผ์–ด์ง€๊ณ , [1,2,4,5]๋ผ๋Š” ํ˜„์žฌ ๋‹ด๊ธด ๋Œ์ด ์ฃผ์–ด์กŒ์„๋•Œ
additionalRocks = 1 ์ด๋ผ๋ฉด [2,2,4,5] ๋˜๋Š” [1,3,4,5]๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , ๋ชจ๋‘ ๊ฐ€๋“์ฐฌ capacity๋Š” 3๊ฐœ ์ด๋ฏ€๋กœ 3์„ return ํ•œ๋‹ค.

์ ‘๊ทผ ๋ฐฉ๋ฒ•

1. ์ฃผ์–ด์ง„ ๋ฐฐ์—ด capacity์™€ rocks๋ฅผ ์„œ๋กœ ๋บ€ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•œ๋‹ค. (๋ชจ์ž๋ž€ ๋Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋Š” ๋ฐฐ์—ด)
let needRocks = capacity.map((rock, idx) => {
  return rock - rocks[idx];
});โ€‹


2. needRocks๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ , ์กฐ๊ธˆ ํ•„์š”ํ•œ ๋Œ๋ถ€ํ„ฐ ์ฑ„์šฐ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค.

needRocks.sort((a, b) => a - b);


3. ํ•„์š”ํ•œ ๋Œ์ด 0๊ฐœ๋ฉด output++;

    ํ•„์š”ํ•œ ๋Œ์ด 1๊ฐœ ์ด์ƒ์ด๋ผ๋ฉด additionalRocks์— ํ•„์š”ํ•œ ๋Œ์„ ๋บ€๋‹ค.
needRocks.forEach(rock => {
  if(rock === 0) output++;
  else{
      additionalRocks -= rock;
      if(additionalRocks >= 0) output++;
      else return false;
  }
})โ€‹

ํ•„์š”ํ•œ ๋Œ์ด 1๊ฐœ ์ด์ƒ์ด๋ผ์„œ additionalRocks์—์„œ ํ•„์š”ํ•œ ๋Œ์„ ๋บ์„ ๋•Œ,
addtionalRocks๊ฐ€ 0๊ฐœ ์ด์ƒ์ด์—ฌ์•ผ output++์„ ํ•˜๊ณ , ์•„๋‹ˆ๋ผ๋ฉด ๋ฐ˜๋ณต๋ฌธ์„ ๋ฉˆ์ถ˜๋‹ค. 

 

/**
 * @param {number[]} capacity
 * @param {number[]} rocks
 * @param {number} additionalRocks
 * @return {number}
 */
 var maximumBags = function(capacity, rocks, additionalRocks) {
  let output = 0;
  let needRocks = capacity.map((rock, idx) => {
      return rock - rocks[idx];
  });
  
  needRocks.sort((a, b) => a - b);
  
  needRocks.forEach(rock => {
      if(rock === 0) output++;
      else{
          additionalRocks -= rock;
          if(additionalRocks >= 0) output++;
          else return false;
      }
  })
  
  return output;
};