๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿง  ์•Œ๊ณ ๋ฆฌ์ฆ˜

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]์—ฐ์†๋œ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ JS

by megan07 2023. 12. 27.

๐Ÿ’ก์ ‘๊ทผ ๋ฐฉ์‹

ํˆฌํฌ์ธํ„ฐ
์‹œ์ž‘ ํฌ์ธํ„ฐ์™€ ๋ ํฌ์ธํ„ฐ ๋‘ ๊ฐ€์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ฒ”์œ„๋ฅผ ๋„“ํ˜€๋‚˜๊ฐ‘๋‹ˆ๋‹ค.
ํฌ์ธํ„ฐ ์‚ฌ์ด์˜ ๋ชจ๋“  ์›์†Œ์˜ ํ•ฉ์ด k์ดํ•˜๋ฉด ๋ ํฌ์ธํ„ฐ ๊ฐ’์„ ๋Š˜๋ฆฌ๊ณ 
k์ดˆ๊ณผ๋ฉด ์‹œ์ž‘ ํฌ์ธํ„ฐ ๊ฐ’์„ ๋Š˜๋ฆฌ๊ธฐ

 

 

function solution(sequence, k) {
  //ํˆฌํฌ์ธํ„ฐ
  //์‹œ์ž‘ ํฌ์ธํ„ฐ์™€ ๋ ํฌ์ธํ„ฐ ๋‘ ๊ฐ€์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ฒ”์œ„๋ฅผ ๋„“ํ˜€๋‚˜๊ฐ‘๋‹ˆ๋‹ค.
  //ํฌ์ธํ„ฐ ์‚ฌ์ด์˜ ๋ชจ๋“  ์›์†Œ์˜ ํ•ฉ์ด k์ดํ•˜๋ฉด ๋ ํฌ์ธํ„ฐ ๊ฐ’์„ ๋Š˜๋ฆฌ๊ณ 
  //k์ดˆ๊ณผ๋ฉด ์‹œ์ž‘ ํฌ์ธํ„ฐ ๊ฐ’์„ ๋Š˜๋ฆฌ๊ธฐ

  let start = 0;
  let end = 0;
  let sum = sequence[0];

  let range = [-Infinity, Infinity];

  //๋ ํฌ์ธํ„ฐ๊ฐ€ ๋ฐฐ์—ด์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ํƒˆ์ถœ = sum์ด k๋ณด๋‹ค ์ž‘๊ธฐ ๋•Œ๋ฌธ์—
  while (end < sequence.length) {
    //start ํฌ์ธํ„ฐ๊ฐ€ end๋ณด๋‹ค ์ปค์ง€๋ฉด end ํฌ์ธํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธ
    if (start > end) end = start;

    //sum์ด k์™€ ๊ฐ™๊ณ  ํ˜„์žฌ ํฌ์ธํ„ฐ์˜ range๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” range๋ณด๋‹ค ์ž‘์œผ๋ฉด ์—…๋ฐ์ดํŠธ
    if (sum === k) {
      const prev_range = range[1] - range[0];
      const current_range = end - start;
      if (current_range < prev_range) range = [start, end];
    }

    //sum์ด k์ด์ƒ์ด๋ฉด end ํฌ์ธํ„ฐ +1
    if (sum <= k) {
      sum += sequence[++end];
    } else {
      //sum์ด k๋ณด๋‹ค ํฌ๋ฉด start ํฌ์ธํ„ฐ+1
      sum -= sequence[start++];
    }
  }

  return range;
}

https://school.programmers.co.kr/learn/courses/30/lessons/178870