SMALL

안녕하세요 오늘은 구간합 문제를 풀어보겠습니다.
해결전략:
우선은 '투포인터' 알고리즘을 이용할 겁니다

화살표는 왼쪽부터 l, r 화살표입니다 밑에 코드와 그림을 대조해 보시길 바랍니다.
코드분류: 투포인터
코드:
#include <bits/stdc++.h>
#include <vector>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int M, N;
cin>> M>>N;
vector<int> v(M);
for(int i= 0; i< M; i++){
cin>> v.at(i);
}
int l = 0, r = 0,sum = 0, count = 0;
while(1){
if(sum >= N){
sum-=v.at(l);
l++;
}
else if(r>=M){
break;
}
else{
sum += v.at(r);
r++;
}
if(sum==N) count++;
}
cout<<count;
}
LIST
'BOJ 문제풀이' 카테고리의 다른 글
백준 10870번 c++ 풀이 (0) | 2021.07.30 |
---|---|
백준 9095번 c++ 풀이 (0) | 2021.07.30 |
백준 1463 c++ 풀이 (1) | 2021.07.28 |
백준 3273 c++ 풀이 (0) | 2021.07.26 |
백준 1074번 c++ 풀이 (0) | 2021.07.22 |