코딩 테스트/백준

[JS] 수들의 합2

58청춘 2024. 10. 26. 22:00
728x90

문제

https://www.acmicpc.net/problem/2003

 

풀이

투포인터의 기본 문제이며, 주어지는 수열에서 연속된 수들의 합이 M이 되면 카운트를 올리는 문제이다.

 

이 문제에서 while 문을 이용해 반복해주는 부분이 있는데, 이 while 문의 조건에 원래는 lp <=  rp 가 들어갔지만 rp가 수열의 길이보다 커진경우 원활한 순환이 되지 않는다.

 

코드

const input = require('fs')
  .readFileSync(process.platform === 'linux' ? '/dev/stdin' : __dirname + '/example.txt')
  .toString().trim().split('\n');

const [n, m] = input.shift().split(' ').map(Number);
const arr = input[0].split(' ').map(Number);

let lp = 0;
let rp = 0;
let answer = 0;

while (lp < n && rp < n) {
  let sum = 0;
  for (let i = 0; i <= rp - lp; i++){
    sum += arr[lp + i];
  }
  
  if (sum === m) answer += 1;

  if (sum <= m) {
    if (rp < arr.length - 1) rp++;
    else {
      lp++;
    }
  }
  else {
    lp++;
  }
}

console.log(answer);
728x90