백준 2003 - 수들의 합2 (실버3)
N개의 수로 된 수열 A[1], A[2], …, A[N] 이 있다. 이 수열의 i번째 수부터 j번째 수까지의 합 A[i] + A[i+1] + … + A[j-1] + A[j]가 M이 되는 경우의 수를 구하는 프로그램을 작성하시오.
첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다.
벡터에 입력값을 저장하고, 반복문을 통해 벡터에서 값을 하나씩 꺼내서 더해준다. 이를 hap이라고 변수 이름을 만들었다. 이 합의 값이 M과 같아지면 break하는데, hap은 break하면 배열의 다음 값으로 초기화되어야 하므로 반복문 초반에 넣었다.
따로 더하지 않아도 M인 경우를 따로 구해줘야 하므로 반복문 맨 마지막에 포함시켰다.
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <vector>
using namespace std;
int main() {
int n, ans, x;
scanf("%d %d", &n,&ans);
vector <int> array;
int result = 0;
for (int i = 0; i < n; i++) {
scanf("%d", &x);
array.push_back(x);
}
for (int i = 0; i < n; i++){
int hap = array[i];
for (int j = i + 1; j < n; j++) {
hap += array[j];
if (hap == ans) {
//더한 결과가 ans와 같으면 반복문을 종료한다.
result++;
break;
}
}
if (ans == array[i]) {
result++;
} //array[i]가 m인 경우
}
printf("%d", result);
return 0;
}
PREVIOUS[C/C++]백준 15666
NEXT[C/C++]백준 10819