Coding Problem

[BOJ 2003] 수들의 합 2

Yepchani 2025. 2. 24. 20:00
반응형

문제

수들의 합 2

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

 

 

풀이

설명

N개의 수로 된 수열 A[1], A[2], …, A[N] 이 있을 때, 이 수열의 i번째 수부터 j번째 수까지의 합 A[i] + A[i+1] + … + A[j-1] + A[j]가 M이 되는 경우의 수를 구하는 문제입니다.

 

투 포인터 알고리즘을 이용해 풀 수 있습니다.

 

start와 end의 인덱스를 0으로 초기화하고, start부터 end까지의 원소 합과 M을 비교합니다.

합이 M보다 크면 start를 증가시키고, M보다 작으면 end를 증가시킵니다.

 

예시 코드

function solution() {
  const [N, M] = input().split(" ").map(Number);
  const A = input().split(" ").map(Number);
  let cnt = 0;
  let start = 0;
  let end = 0;
  let sum = 0;

  while (end <= N) {
    if (sum === M) {
      cnt++;
      sum -= A[start];
      start++;
    } else if (sum < M) {
      sum += A[end];
      end++;
    } else {
      sum -= A[start];
      start++;
    }
  }

  return cnt;
}

'Coding Problem' 카테고리의 다른 글

[BOJ 1697] 숨바꼭질  (0) 2025.02.26
[BOJ 1043] 거짓말  (0) 2025.02.25
[BOJ 1515] 수 이어 쓰기  (0) 2025.02.23
[BOJ 1965] 상자넣기  (0) 2025.02.22
[BOJ 14719] 빗물  (0) 2025.02.21