[BOJ 2003] 수들의 합 2
🔗Link
💡Idea
간단한 투 포인터 문제.
🔑Code
#include <bits/stdc++.h>
using namespace std;
int arr[10'000];
int N, M, ans = 0;
int main(void){
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M;
for (int i = 0; i < N; i++) {
cin >> arr[i];
}
int st = 0, en = 0, sum = 0;
while (st<=en) {
while (sum < M && en < N) {
sum += arr[en++];
}
if (sum == M) ans++;
sum -= arr[st++];
}
cout << ans;
return 0;
}
🗨️ Side Notes
투 포인터 문제를 처음 접근하며 풀이를 궁리했을 때, 바깥 반복문에서는 st를 밀고, 안쪽 반복문을 en를 미는 식으로 구현했었다. 일단 en을 최대한 밀어보고, 막혔을 때 st를 하나 밀고 다시 en을 밀어보는 느낌이다. 그래서인지 늘 투 포인터 문제를 만나면 그런 식으로 짜게 되더라. 다른 사람들 풀이를 보면, 하나의 반복문에 if문으로 st를 미는 경우와 en를 미는 경우를 구분하더라.
- 나
while (st<=en) { while (조건1 && en < N) { en++; } if(조건2) s++; } - 내가 생각하는 다른 사람들이 주로 짜는 방식
while (st<=en && en < N) { if(조건1){ st++; } else if(조건2) { en++; } }실제로 사람들이 저렇게들 많이 짜는지는 사실 나도 잘 몰루