반응형
투포인터를 활용한 문제이다.
1. s, e 포인터를 생성하여 벡터의 첫번째 원소를 가리킨다.
2. e 포인터가 벡터의 사이즈보다 작을때 동안 반복문을 돌린다.
3. 만약 sum값이 m보다 작다면 s포인터가 가리키고 있는 원소의 값을 sum값에 빼주면서 포인터의 위치를 하나 증가
4. sum값이 m가 같다면 result 값 증가
5. s 포인터가 증가 시켜야하는 조건문에 부합되지 않으면 continue에 걸리지 않는다. 그러므로 end 포인터를 증가시켜야하는 코드부분에 도달하게 된다. 여기서 주의할 점은 증가된 e포인터가 원소의 값을 갖고 있을때만 sum에 더해준다.
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m; cin >> n >> m;
vector <int> v(n, 0);
for (int i = 0; i < n; i++)cin >> v[i];
int s, e, sum;
s = e = 0;
sum = v[s];
int result = 0;
while (e<v.size()) {
if (sum > m) {
sum -= v[s++];
continue;
}
if (sum == m)result++;
if (e < v.size() - 1) {
sum += v[++e];
}
else e++;
}
cout << result;
}
end
반응형
'백준 > 증가수열 & 투포인터' 카테고리의 다른 글
[백준 1806번 / C++] 부분합 (0) | 2022.03.02 |
---|---|
[백준 2230번 / C++] 수 고르기 (0) | 2022.02.16 |
[백준 1940번 / C++] 주몽 (0) | 2022.02.10 |
[백준 1911번 / C++] 흙길 보수하기 (0) | 2022.02.09 |
[백준 2170번 / C++] 선 긋기 (0) | 2022.02.09 |
댓글