내 풀이
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n,m;
int a[10004];
int en,tot;
int cnt=0;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
en=0;
tot=a[0];
for(int st=0;st<n;st++)
{
while(en<n&&tot<m)
{
en++;
if(en!=n)
{
tot+=a[en];
}
}
if(en==n)break;
if(tot==m)
{
cnt++;
}
tot-=a[st];
}
cout<<cnt;
}
다른 풀이
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
ll pf_sum[10005];
int main(void){
ios::sync_with_stdio(0);
cin.tie(0);
int n, m;
cin >> n >> m;
pf_sum[0] = 0;
for (int i = 1; i <= n; i++) cin >> pf_sum[i], pf_sum[i] += pf_sum[i - 1];
int lp = 0, rp = 0;
int ans = 0;
while (rp <= n) {
ll csum = pf_sum[rp] - pf_sum[lp];
if (csum <= m) {
if (csum == m) ans++;
rp++;
}
else lp++;
}
cout << ans;
}
/*
구간의 합을 관리할 때 강의 내에서 소개한 방법과 같이 tot 변수를 하나 들고 있어도 되고 이 코드와 같이 prefix sum을 이용해도 됨
*/
'Algorithm > C++' 카테고리의 다른 글
[백준 4344] 평균은 넘겠지 (0) | 2023.08.19 |
---|---|
[백준 1920] 수 찾기 (0) | 2022.11.01 |
[백준 1806] 부분합 (0) | 2022.11.01 |
[백준 2230] 수 고르기 (0) | 2022.11.01 |
[백준 14888] 연산자 끼워넣기 (0) | 2022.10.20 |
댓글