https://www.acmicpc.net/problem/2003
1. 풀이방법
- N의 숫자의 범위가 큰편입니다.
- O(N^2)은 100,000,000 시간제한 0.5초에 타임리밋 걸릴 수 있습니다.
- 투포인터를 이용해 한번의 순회로 해결했습니다.
- 단, 이는 A[i]가 자연수 (음수 아님) 조건이 있기 때문에 사용할 수 있습니다.
2. 주의사항
- 문제 조건을 정확히 파악해야 합니다.
3. 나의코드
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int N, M;
vector<long long> arr;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> N >> M;
long long tt;
for (int i = 0; i < N; i++) {
cin >> tt;
arr.push_back(tt);
}
int tmpsum = arr[0];
int resultcount = 0;
int sp = 0;
int ep = 0;
while (1) {
if (tmpsum == M) {
resultcount++;
tmpsum -= arr[sp];
sp++;
ep++;
if (ep == N) break;
tmpsum += arr[ep];
}
else if (tmpsum < M) {
ep++;
if (ep == N) break;
tmpsum += arr[ep];
}
else if (tmpsum > M) {
tmpsum -= arr[sp];
sp++;
}
}
cout << resultcount;
return 0;
}
'알고리즘 문제풀이 > 탐색' 카테고리의 다른 글
백준 1920 [C++] (0) | 2021.09.19 |
---|---|
백준 3079 [C++] (0) | 2021.01.27 |
백준 2776 [C++] (0) | 2021.01.27 |
백준 2792 [C++] (0) | 2021.01.26 |
백준 1254 [C++] (0) | 2021.01.15 |