๊ด€๋ฆฌ ๋ฉ”๋‰ด

Ming's develop story

๊ณผ์ผ ์žฅ์ˆ˜ - ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ณธ๋ฌธ

D E V E L O P ๐Ÿ’ป/์•Œ๊ณ ๋ฆฌ์ฆ˜

๊ณผ์ผ ์žฅ์ˆ˜ - ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

Ming 2025. 2. 17. 21:39
๋ฌธ์ œ ์„ค๋ช…
๊ณผ์ผ ์žฅ์ˆ˜๊ฐ€ ์‚ฌ๊ณผ ์ƒ์ž๋ฅผ ํฌ์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ๊ณผ๋Š” ์ƒํƒœ์— ๋”ฐ๋ผ 1์ ๋ถ€ํ„ฐ k์ ๊นŒ์ง€์˜ ์ ์ˆ˜๋กœ ๋ถ„๋ฅ˜ํ•˜๋ฉฐ, k์ ์ด ์ตœ์ƒํ’ˆ์˜ ์‚ฌ๊ณผ์ด๊ณ  1์ ์ด ์ตœํ•˜ํ’ˆ์˜ ์‚ฌ๊ณผ์ž…๋‹ˆ๋‹ค. ์‚ฌ๊ณผ ํ•œ ์ƒ์ž์˜ ๊ฐ€๊ฒฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.ํ•œ ์ƒ์ž์— ์‚ฌ๊ณผ๋ฅผ m๊ฐœ์”ฉ ๋‹ด์•„ ํฌ์žฅํ•ฉ๋‹ˆ๋‹ค.์ƒ์ž์— ๋‹ด๊ธด ์‚ฌ๊ณผ ์ค‘ ๊ฐ€์žฅ ๋‚ฎ์€ ์ ์ˆ˜๊ฐ€ p (1 โ‰ค p โ‰ค k)์ ์ธ ๊ฒฝ์šฐ, ์‚ฌ๊ณผ ํ•œ ์ƒ์ž์˜ ๊ฐ€๊ฒฉ์€ p * m ์ž…๋‹ˆ๋‹ค.๊ณผ์ผ ์žฅ์ˆ˜๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋งŽ์€ ์‚ฌ๊ณผ๋ฅผ ํŒ”์•˜์„ ๋•Œ, ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ด์ต์„ ๊ณ„์‚ฐํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.(์‚ฌ๊ณผ๋Š” ์ƒ์ž ๋‹จ์œ„๋กœ๋งŒ ํŒ๋งคํ•˜๋ฉฐ, ๋‚จ๋Š” ์‚ฌ๊ณผ๋Š” ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค)์˜ˆ๋ฅผ ๋“ค์–ด, k = 3, m = 4, ์‚ฌ๊ณผ 7๊ฐœ์˜ ์ ์ˆ˜๊ฐ€ [1, 2, 3, 1, 2, 3, 1]์ด๋ผ๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด [2, 3, 2, 3]์œผ๋กœ ๊ตฌ์„ฑ๋œ ์‚ฌ๊ณผ ์ƒ์ž 1๊ฐœ๋ฅผ ๋งŒ๋“ค์–ด ํŒ๋งคํ•˜์—ฌ ์ตœ๋Œ€ ์ด์ต์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.(์ตœ์ € ์‚ฌ๊ณผ ์ ์ˆ˜) x (ํ•œ ์ƒ์ž์— ๋‹ด๊ธด ์‚ฌ๊ณผ ๊ฐœ์ˆ˜) x (์ƒ์ž์˜ ๊ฐœ์ˆ˜) = 2 x 4 x 1 = 8์‚ฌ๊ณผ์˜ ์ตœ๋Œ€ ์ ์ˆ˜ k, ํ•œ ์ƒ์ž์— ๋“ค์–ด๊ฐ€๋Š” ์‚ฌ๊ณผ์˜ ์ˆ˜ m, ์‚ฌ๊ณผ๋“ค์˜ ์ ์ˆ˜ score๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ณผ์ผ ์žฅ์ˆ˜๊ฐ€ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ด์ต์„ returnํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/๊ณผ์ผ ์žฅ์ˆ˜

 

์ž…์ถœ๋ ฅ ์˜ˆ

k m score result
3 4 [1, 2, 3, 1, 2, 3, 1] 8
4 3 [4, 1, 2, 2, 4, 4, 4, 4, 1, 2, 4, 2] 33

 

 

๋‚ด ํ’€์ด

function computeMaxProfit(k, m, score) {
  const numBox = Math.floor(score.length / m);
  const availableScores = score.sort((a, b) => b - a).slice(0, numBox * m);

  const result = availableScores.reduce((acc, cur, index) => {
    if ((index + 1) % m === 0) {
      return (acc = acc + cur * m);
    }

    return acc;
  }, 0);

  return result;
}

 

 

๊ณ ๋ฏผ์„ ํ•ด๋ณด๋‹ˆ ๊ฒฐ๊ตญ ์ตœ๋Œ€ ์ด์ต์„ ๋‚ด๋ ค๋ฉด ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ์„ ํ•ด์„œ ํ•œ ๋ฐ•์Šค์— ๋“ค์–ด๊ฐˆ ์‚ฌ๊ณผ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ •ํ•ด์ง€๋‹ˆ ๊ทธ๊ฒƒ์œผ๋กœ ๋ช‡ ๋ฐ•์Šค๋ฅผ ์ฑ„์šธ ์ˆ˜ ์žˆ์„์ง€ ์•Œ๋ฉด ๋˜์—ˆ๋‹ค.

 

์šฐ์„  score.length๋ฅผ ํ•œ ๋ฐ•์Šค์— ๋“ค์–ด๊ฐˆ ์‚ฌ๊ณผ์˜ ๊ฐœ์ˆ˜๋กœ ๋‚˜๋ˆˆ ๋’ค ์†Œ์ˆ˜์ ์„ ๋ฒ„๋ ค numBox ๋ฅผ ์ •์˜ํ–ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  score ๋ฐฐ์—ด์—์„œ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ๋’ค ํ•„์š”ํ•œ ์ˆ˜๋งŒ ๋นผ๊ณ  ๋ฒ„๋ ค์ฃผ๋Š” ์ž‘์—…์„ ํ–ˆ๋‹ค.

 

์ดํ›„ reduce๋ฅผ ์‚ฌ์šฉํ–ˆ๊ณ , ๊ฐ ๋ฐ•์Šค์—์„œ ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•  ์ธ๋ฑ์Šค ๊ฐ’์˜ ์กฐ๊ฑด์— ์œ„์น˜ํ•œ ๊ทธ ๋ฐ•์Šค์˜ ์ตœ์†Œ๊ฐ’์ด๋ผ๋ฉด ๊ทธ ๊ฐ’์— ํ•œ ์ƒ์ž์— ๋‹ด๊ธด ์‚ฌ๊ณผ ๊ฐœ์ˆ˜๋ฅผ ๊ณฑํ•˜์—ฌ์ฃผ๊ณ  ๋”ํ•ด์คŒ์œผ๋กœ์จ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋„์ถœํ•ด๋ƒˆ๋‹ค.

 

๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด

function solution(k, m, score) {
    let answer = 0;
    const sortedScore = score.slice().sort((a, b) => a - b).slice(score.length % m);
    for (let i = 0; i < sortedScore.length; i += m) {
        answer += sortedScore[i] * m;
    }
    return answer;
}

 

๊ฐ„๊ฒฐํ•˜๊ณ  ๊น”๋”ํ–ˆ๋‹ค.

์šฐ์„  score.slice()๋กœ ์›๋ณธ ๋ฐฐ์—ด์„ ์œ ์ง€ํ•œ ์ƒํƒœ๋กœ ๋ฐฐ์—ด์„ ๋ณต์‚ฌํ•˜์˜€๊ณ  ๊ทธ๊ฒƒ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ํ•œ ๋’ค ๋‚˜๋จธ์ง€ ๊ฐ’๋“ค์„ slice ๋กœ ์ž˜๋ผ๋‚ด์—ˆ๋‹ค. ์ดํ›„ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ์ƒ์ž์˜ ์ตœ์†Œ๊ฐ’๋งŒ ๋ฝ‘์•„์„œ ๋”ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด i๋ฅผ m์”ฉ ์ฆ๊ฐ€์‹œ์ผฐ๋‹ค.

 

 

๋‚ด๊ฐ€ ์ ‘๊ทผํ•œ ๋ฐฉ์‹๋ณด๋‹ค ๋‘ ๊ฐ€์ง€ ์ธก๋ฉด์—์„œ ๋” ์ข‹๋‹ค๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

 

์ฒซ ๋ฒˆ์งธ๋กœ๋Š” score์— ๋ฐ”๋กœ sort๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋œ ๋ฐฐ์—ด์€ ์›๋ณธ ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์›๋ณธ ๋ฐฐ์—ด ์ž์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด ๋ณต์‚ฌ๋ฅผ ์œ„ํ•ด slice()๋ฅผ ์‚ฌ์šฉํ•œ ์ ์ด์—ˆ๋‹ค. 

๋‘ ๋ฒˆ์งธ๋กœ๋Š” reduce()๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•ด์„œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋น„์šฉ์ด ์ถ”๊ฐ€๋˜์–ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐ˜๋ณต๋ฌธ๋ณด๋‹ค ํด ์ˆ˜ ์žˆ์–ด์„œ ๊ฐ„๋‹จํ•œ ์—ฐ์‚ฐ์— ์žˆ์–ด์„œ๋Š” for๋ฌธ์ด ๋” ๋น ๋ฅธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

Comments