백준 2003 - 수들의 합 2


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

댓글