본문 바로가기
개발 노트/백준, 프로그래머스 풀이

[백준 2003/javascript] 수들의 합 2

by tokkiC 2022. 10. 4.

완전 탐색도 가능하겠지만

구간합으로 수의 조합을 찾아 나가는 것은 투포인터를 생각하면 된다

투포인터 원리대로 포인터 두개로 움직여 끝나는 조건을 만들어 만들어주면 된다

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

 

2003번: 수들의 합 2

첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다.

www.acmicpc.net

let input = [];

const readline = require("readline").createInterface({
  input: process.stdin,
  output: process.stdout,
});

readline.on("line", (line) => {
  input.push(line);
});

readline.on("close", () => {
  solution(input);
  process.exit();
});

const solution = (inp) => {
  let [n, m] = inp[0].split(" ").map((el) => Number(el));
  let arr = inp[1].split(" ").map((el) => Number(el));
  let cnt = 0;
  let left = 0;
  let right = 0;
  let sum = 0;

  while (true) {
    if (sum >= m) {
      sum -= arr[left++];
    } else if (right === n) {
      break;
    } else {
      sum += arr[right++];
    }
    if (sum === m) {
      cnt++;
    }
  }
  console.log(cnt);
};

댓글