문제풀이(Problem Solving)

백준, BOJ, 2003번 C++ [CPP]

게임이 더 좋아 2021. 8. 27. 08:25
반응형
728x170

 

바로 생각한 대로 실행하면 되는 문제다.

 

 

https://www.acmicpc.net/problem/2003

 


 

우선 N~M번째 까지의 합은

1~M - 1~N-1 인것을 나는 이용했다.

 

하지만 이제부터는 잘한 사람들에게서도 나와 무엇이 다른지 공부하기로 했다 우선 

나의 풀이를 보고 다른 잘한 사람들의 풀이를 비교해보자

 

#맞은 풀이

#include <iostream>

using namespace std;

int N,M;

int arr[10001];
int dp[10001]; // dp[i] -> 1~i번째까지의 합

// N~M 까지의 합은 1~M번째 까지의 합 - 1~N-1 번째까지의 합.

int main(){
    cin >> N >> M;
    int cnt = 0;
    
    for(int i=1; i<=N; i++){
        cin >> arr[i];
        dp[i] = dp[i-1] + arr[i];
    }
    for(int j = N; j>=1; j--){
        for(int i = 1; i<=j; i++){
            if(dp[j]-dp[i-1] == M){
                cnt++;
            }
        }
    }
    
    cout << cnt;
}

 

#다른 사람 풀이

 

#include<cstdio>
int i;
int sum;
int dap;
int left;
int main()
{
    int n, m, a[10005];
	scanf("%d %d", &n, &m);
	for (i = 0; i < n; i++)
	{
		scanf("%d", a + i); // 0번 인덱스부터 채워넣으면서 sum 계산.
		sum += a[i];	//순서대로 더하면서 0~N까지 계산
		while (sum > m)  // 만약 M보다 작아지거나 같아질 때까지 앞의 원소를 삭제.
		sum -= a[left++];

		dap += sum == m; // M과 같아졌다면 해당 값 카운트
	}
	printf("%d\n", dap);
}

 

나와 다른 것은..

나는 전부 조사한다면

이 사람은 입력받으면서 조사하기에 시간이 절약된다는 것

 

처음부터 이 풀이를 생각하기는 어려울 것 같다...

아무튼 저 사람은 정말 이해를 잘하고 이용을 했다.

 

즉, 나는 j를 1부터 했지만 저 사람은 M이 넘는 순간에만 조사하는 것이다.

이것이 더 효율적이긴 하네

728x90
반응형
그리드형

'문제풀이(Problem Solving)' 카테고리의 다른 글

백준, BOJ, 17298번 C++ [CPP]  (0) 2021.08.28
백준, BOJ, 1260번 C++ [CPP]  (0) 2021.08.28
백준, BOJ, 1094번 C++ [CPP]  (0) 2021.08.25
백준, BOJ, 18111번 C++ [CPP]  (0) 2021.08.23
백준, BOJ, 15654번 C++ [CPP]  (0) 2021.07.06