1. 문제 정리
- N개의 수열이 주어진다.
- 주어진 수열에서 i번째값부터 j번째값까지의 합이 M이 되는 경우의 수를 구한다.
2. 접근
- BruteForce로 풀었다.
- 인덱스를 하나씩 늘려가 합의 값을 구하고, 합의 값이 M보다 큰 경우에는 경우의 수를 체크하지 않고, M과 같을 경우에는 경우의 수 값을 하나 늘려준다.
3. 풀이
//2021.01.11
#include<iostream>
using namespace std;
int a[10000];
int n, m;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(nullptr);
cin >> n >> m;
for(int i = 0; i < n; i++){
cin >> a[i];
}
int ans = 0;
for(int i = 0; i < n; i++){
int sum = 0;
for(int j = i; j < n; j++){
sum += a[j];
if(sum > m) break;
if(sum == m) ans++;
}
}
cout << ans;
}
- int a[10000] : N개의 수열을 저장할 배열
- int main() : for loop 에서 위 접근 방식을 그대로 코드로 옮겨놓았다.
4. 소감
사실 이번 문제는 소감이랄 것도.. 설명이랄 것도 그렇게 필요하지 않은 문제라고 생각한다. 문제가 직관적이고 해석해야할 여지가 크게 없기에 문제에서 제시하는 조건을 그대로 따라가면 쉽게 풀 수 있는 문제가 아닐까 생각한다.
'study > coding test' 카테고리의 다른 글
백준 1644 - 소수의 연속합 (0) | 2022.01.13 |
---|---|
백준 1806 - 부분합 (0) | 2022.01.12 |
백준 5014 - 스타트링크 (0) | 2022.01.10 |
백준 3108 - 로고 (0) | 2021.12.31 |
백준 2251 - 물통 (0) | 2021.12.28 |
댓글