https://www.acmicpc.net/problem/1940
[필자 사고]
투포인터 문제이다.
다만 투포인터 알고리즘을 적용하기 이전에 무작위로 입력된 배열의 값들을 정렬해야 된다.
현재 N의 값은 15000이다. N^2알고리즘을 적용하게 되면 시간초과가 발생한다.
이로 인해 NlogN 알고리즘을 사용해야 된다. 현재 c++내장 정렬함수인 sort 함수를 사용하였다.
이제 startIdx 와 endIdx 를 사용하여 sum보다 작으면 startIdx 를 하나 증가시키고 반대의 경우는 endIdx를 감소시킨다.
여기서 중요한 부분은 startIdx<endIdx 인 경우만 검사해야 된다. == 이 경우도 조사하게 되면 서로다른 두가지 조건에 위반되기 때문이다.
[소스코드]
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> arr;
int startIdx, endIdx;
int N, M;
int resultCount = 0;
void Input() {
cin >> N >> M;
arr.resize(N);
for (int i = 0; i < N; i++) {
cin >> arr[i];
}
sort(arr.begin(), arr.end());
}
void GameStart() {
startIdx = 0;
endIdx = arr.size() - 1;
while (startIdx < endIdx) {
int sum = arr[startIdx] + arr[endIdx];
if (sum == M) {
resultCount++;
startIdx++;
}
else if (sum > M) {
endIdx--;
}
else {
startIdx++;
}
}
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
Input();
GameStart();
cout << resultCount;
}
'백준 > 투포인터' 카테고리의 다른 글
백준 2467 c++ "용액" -PlusUltraCode- (0) | 2025.01.02 |
---|---|
백준 1806 c++ "부분합" -PlusUltraCode- (0) | 2024.12.25 |
백준 12891 c++ "DNA 비밀번호" -PlusUltraCode- (0) | 2024.08.14 |
백준 1253 c++ "좋다" -PlusUltraCode- (0) | 2024.08.13 |