πŸ•οΈ PS (BOJ)/Two Pointer

[BOJ][C++] λ°±μ€€ 2003번: μˆ˜λ“€μ˜ ν•© 2

선달 2023. 7. 27. 18:04
λ°˜μ‘ν˜•

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

 

2003번: μˆ˜λ“€μ˜ ν•© 2

첫째 쀄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 μ£Όμ–΄μ§„λ‹€. λ‹€μŒ μ€„μ—λŠ” A[1], A[2], …, A[N]이 곡백으둜 λΆ„λ¦¬λ˜μ–΄ μ£Όμ–΄μ§„λ‹€. 각각의 A[x]λŠ” 30,000을 λ„˜μ§€ μ•ŠλŠ” μžμ—°μˆ˜μ΄λ‹€.

www.acmicpc.net

 

문제

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을 λ„˜μ§€ μ•ŠλŠ” μžμ—°μˆ˜μ΄λ‹€.

좜λ ₯

첫째 쀄에 경우의 수λ₯Ό 좜λ ₯ν•œλ‹€.

 

풀이

 

νˆ¬ν¬μΈν„° 이용

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    vector<int> v(n);
    for(int i=0; i<n; i++) {
        cin >> v[i];
    }
    
    int ans=0;
    int tmp = v[0];
    for(int start=0, end=0; end<n;) {
        while(tmp>m && start<end) {
            tmp -= v[start];
            start++;
        }
        if(tmp==m) {
            ans++;
        }
        end++;
        tmp += v[end];
    }
    
    cout << ans;
    
    return 0;
}

 

λΆ€λΆ„ν•© 이용

// 풀이 : https://whkakrkr.tistory.com

#include <bits/stdc++.h>

using namespace std;

int solution(int n, int m, vector<int>&a) {
    vector<int>prefix(n+1, 0);
    for(int i=1; i<=n; i++) {
        prefix[i] = prefix[i-1] + a[i-1];
    }
    
    int ans = 0;
    for(int right=n; right>0; right--) {
        for(int left=0; left<right; left++) {
            if(prefix[right] - prefix[left] == m) {
                ans++;
                break;
            }
            
        }
    }
    
    return ans;
}

int main() {
    ios_base::sync_with_stdio(false);
	cout.tie(NULL);
	cin.tie(NULL);
	
	int n,m;
	cin >> n >> m;
	vector<int>a(n);
	for(int i=0; i<n; i++) {
	    cin >> a[i];
	}
	
	cout << solution(n,m,a);

    return 0;
}
λ°˜μ‘ν˜•