풀이
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);
}
출처
'PS > Baekjoon Online Judge' 카테고리의 다른 글
[백준 15649] N과 M (1) [C] (0) | 2021.08.04 |
---|---|
[백준 2606] 바이러스 [C] (0) | 2021.08.04 |
[백준 11441] 합 구하기 [C] (0) | 2021.08.03 |
[백준 11660] 구간 합 구하기 5 [C] (0) | 2021.08.03 |
[백준 2167] 2차원 배열의 합 [C] (0) | 2021.08.03 |