Algorithm/์ธํ”„๋Ÿฐ(inflearn)

[JavaScript/section 5] 05 - ์ตœ๋Œ€ ๋งค์ถœ

_์„ฑํ˜ธ_ 2022. 9. 20. 16:35
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ 05 - ์ตœ๋Œ€ ๋งค์ถœ(์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ)

ํ˜„์ˆ˜ ์•„๋น ๋Š” ํ˜„์ˆ˜์—๊ฒŒ N์ผ ๋™์•ˆ์˜ ๋งค์ถœ๊ธฐ๋ก์„ ์ฃผ๊ณ  ์—ฐ์†๋œ K์ผ ๋™์•ˆ์˜ ์ตœ๋Œ€ ๋งค์ถœ์•ก์ด ์–ผ๋งˆ์ธ์ง€ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

๋‚˜์˜ ํ’€์ด ๋ฐฉ๋ฒ•

  • ์ด์ค‘ for ๋ฌธ์„ ๋Œ๋ฉฐ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ K์ผ ๋™์•ˆ์˜ ๋งค์ถœ์•ก์„ ๊ตฌํ•œ๋‹ค.
  • answer ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๊ฐ’๊ณผ sum์„ ๋น„๊ตํ•˜์—ฌ ๋” ํฐ ๊ฐ’์„ answer ๋ณ€์ˆ˜์— ๋„ฃ์–ด์ค€๋‹ค.

๐Ÿ‘ ๊ฐ•์‚ฌ๋‹˜ ํ’€์ด ๋ฐฉ๋ฒ•(์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ)

๊ณ ์ • ์‚ฌ์ด์ฆˆ์˜ ์œˆ๋„์šฐ๊ฐ€ ์Šฌ๋ผ์ด๋”ฉ(์ด๋™)ํ•˜๋ฉด์„œ ์œˆ๋„์šฐ ๋‚ด์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด ๋ฌธ์ œ๋ฅผ ํ’€์ดํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜โ—โ—

์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(N)์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด์ค‘ for ๋ฌธ์„ ์ด์šฉํ•œ ๋ฐฉ๋ฒ•๋ณด๋‹ค ํšจ์œจ์ ์ด๋‹ค.

  • ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’๋ถ€ํ„ฐ K ๋ฒˆ์งธ ์ธ๋ฑ์Šค๊นŒ์ง€์˜ ํ•ฉ์„ sum์— ์ €์žฅํ•œ๋‹ค.
  • answer ๋ณ€์ˆ˜์— sum์— ์ €์žฅ๋œ ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค.
  • ์œ„์˜ ๊ณผ์ •์ด ๊ณ ์ • ์‚ฌ์ด์ฆˆ์˜ ์œˆ๋„์šฐ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ํ•˜๋ฉด ์ด์ œ ์•ž์œผ๋กœ ์ญˆ~์šฑ ๋ฐ€๋ฉด์„œ ์ตœ๋Œ€๊ฐ’์„ ์ฐพ์œผ๋ฉด ๋œ๋‹ค.
  • ์œˆ๋„์šฐ๊ฐ€ ํ•œ ์นธ ์ด๋™ํ•˜๋ฉด sum์— arr[i]๋ฅผ ๋”ํ•˜๊ณ  arr[i - k]๋ฅผ ๋นผ์ค€๋‹ค. sum์€ ํ˜„์žฌ ์œˆ๋„์šฐ ๋‚ด์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ํ•ฉ์ด๋‹ค.
  • answer ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๊ฐ’๊ณผ sum์„ ๋น„๊ตํ•˜์—ฌ ๋” ํฐ ๊ฐ’์„ answer ๋ณ€์ˆ˜์— ๋„ฃ์–ด์ค€๋‹ค.

 

๐Ÿ“ ํ’€์ด

// ๋‚˜์˜ ํ’€์ด ๋ฐฉ๋ฒ•
function solution(k, arr) {
  let answer = Number.MIN_SAFE_INTEGER;
  let sum = 0;

  for (let i = 0; i < arr.length - 2; i++) {
    sum = 0;
    let j = i;
    for (let s = 0; s < k; s++) {
      sum += arr[j++];
    }
    answer = Math.max(answer, sum);
  }

  return answer;
}

let a = [12, 15, 11, 20, 25, 10, 20, 19, 13, 15];
console.log(solution(3, a));
// ๊ฐ•์‚ฌ๋‹˜ ํ’€์ด ๋ฐฉ๋ฒ•
function solution(k, arr) {
  let answer;
  let sum = 0;

  for (let i = 0; i < k; i++) sum += arr[i];
  answer = sum;

  for (let i = k; i < arr.length; i++) {
    sum += arr[i] - arr[i - k];
    answer = Math.max(answer, sum);
  }

  return answer;
}

let a = [12, 15, 11, 20, 25, 10, 20, 19, 13, 15];
console.log(solution(3, a));