728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ 04 - ์—ฐ์† ๋ถ€๋ถ„์ˆ˜์—ด 2(ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜)

N๊ฐœ์˜ ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆ˜์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ์ด ์ˆ˜์—ด์—์„œ ์—ฐ์†๋ถ€๋ถ„์ˆ˜์—ด์˜ ํ•ฉ์ด ํŠน์ • ์ˆซ์ž M์ดํ•˜๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ช‡ ๋ฒˆ ์žˆ๋Š”์ง€ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

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

  • for ๋ฌธ์„ ์ฐจ๋ก€๋Œ€๋กœ ๋Œ๋ฉฐ ํฌ์ธํ„ฐ rt์˜ ์œ„์น˜๋ฅผ ์ด๋™์‹œํ‚จ๋‹ค.
  • ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๊ฐ’์„ sum์— ๋ˆ„์ ์‹œ์ผœ์ค€๋‹ค.
  • sum์ด m๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ answer++์„ ํ•ด์ค€๋‹ค.
  • ํฌ์ธํ„ฐ rt๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๊ฐ’์ด m ์ดํ•˜์ด๊ณ  sum๊ณผ ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด answer++์„ ํ•ด์ค€๋‹ค. ํฌ์ธํ„ฐ rt๊ฐ€ 1์”ฉ ์ฆ๊ฐ€ํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๊ฐ’์ด ํŠน์ • ์ˆซ์ž M์ดํ•˜๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ์œ„ ๊ณผ์ •์—์„œ sum์ด m๋ณด๋‹ค ํฌ๊ณ  ๊ฐ™์•„์งˆ ๊ฒฝ์šฐ ํฌ์ธํ„ฐ lt๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์ž‡๋Š” ๊ฐ’์„ sum์—์„œ ๋นผ์ค€๋‹ค.
  • sum์ด m ์ดํ•˜์ด๊ณ  ํฌ์ธํ„ฐ rt๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๊ฐ’๊ณผ ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด answer++์„ ํ•ด์ค€๋‹ค. ํฌ์ธํ„ฐ rt๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๊ฐ’๊ณผ ๊ฐ™์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๋Š” ์กฐ๊ฑด์„ ์ค€ ์ด์œ ๋Š” ์œ„์—์„œ ์ด๋ฏธ ํ•ด๋‹น ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด ์คฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • for ๋ฌธ์ด ๋๋‚˜๋ฉด answer์„ return ํ•ด์ค€๋‹ค.

๐Ÿ‘ ๊ฐ•์‚ฌ๋‹˜ ํ’€์ด ๋ฐฉ๋ฒ•

  • for ๋ฌธ์„ ์ฐจ๋ก€๋Œ€๋กœ ๋Œ๋ฉฐ ํฌ์ธํ„ฐ rt์˜ ์œ„์น˜๋ฅผ ์ด๋™์‹œํ‚จ๋‹ค.
  • sum์— ํฌ์ธํ„ฐ rt๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๊ฐ’์„ sum์— ๋ˆ„์ ์‹œ์ผœ์ค€๋‹ค.
  • ํฌ์ธํ„ฐ rt๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ฌ๋•Œ ๋งˆ๋‹ค answer์— ์—ฐ์†๋ถ€๋ถ„์ˆ˜์—ด์˜ ํ•ฉ์ด ํŠน์ • ์ˆซ์ž M์ดํ•˜๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜(rt - lt + 1)๋ฅผ ๋”ํ•œ๋‹ค.
  • ๋‹จ, sum์ด m๋ณด๋‹ค ํด ๊ฒฝ์šฐ ํฌ์ธํ„ฐ lt๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์ž‡๋Š” ๊ฐ’์„ sum์—์„œ ๋นผ์ค€๋‹ค.
  • for ๋ฌธ์ด ๋๋‚˜๋ฉด answer์„ return ํ•ด์ค€๋‹ค.

 

๐Ÿ“ ํ’€์ด

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

  for (let rt = 0; rt < arr.length; rt++) {
    sum += arr[rt];
    if (sum <= m) answer++;
    if (arr[rt] <= m && sum !== arr[rt]) answer++;
    while (sum >= m) {
      sum -= arr[lt++];
      if (sum <= m && sum !== arr[rt]) answer++;
    }
  }

  return answer;
}

let a = [1, 3, 1, 2, 3];
console.log(solution(5, a));
// ๊ฐ•์‚ฌ๋‹˜ ํ’€์ด ๋ฐฉ๋ฒ•
function solution(m, arr) {
  let answer = 0,
    sum = 0,
    lt = 0;

  for (let rt = 0; rt < arr.length; rt++) {
    sum += arr[rt];
    while (sum > m) {
      sum -= arr[lt++];
    }
    answer += rt - lt + 1;
  }

  return answer;
}

let a = [1, 3, 1, 2, 3];
console.log(solution(5, a));
_์„ฑํ˜ธ_