PS/Baekjoon Online Judge

[백준 2003] 수들의 합 2 [C]

kimyoungrok 2021. 8. 4. 10:10

백준 - 2003


풀이

start, end로 배열의 index를 조작하여 합을 구하다가

  • M 이상일 때는 start가 가르키는 값을 빼고, start를 증가시킨다.
  • M 미만일 때는 end가 가르키는 값을 더하고, end를 증가시킨다.
  • 위 과정을 거친 후 sum이 M과 동일할 때, cnt를 증가시킨다.

소스코드

#include <stdio.h>
int main(){
    int N, M;
    scanf("%d %d", &N, &M);
    int arr[N];
    for (int i = 0; i < N; i++)
        scanf("%d", &arr[i]);
    int start = 0, end = 0, sum = 0, cnt = 0;
    while (end <= N){
        sum += (sum < M ? arr[end++] : -arr[start++]);
        sum == M && cnt++;
    }
    printf("%d", cnt);
}

출처

 

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