https://www.acmicpc.net/problem/1253
이 문제는 이분탐색 문제이다 처음 그냥 대충 쉽게 접근하다가 틀렸는데 같은수가 여러번 들어갈수 있음을 망각했다
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
long long n;
vector<long long > inputData;
int main() {
cin >> n;
long long tmp;
long long cnt = 0;
for (long long i = 0; i < n; i++) {
cin >> tmp;
inputData.push_back(tmp);
}
sort(inputData.begin(), inputData.end());
for (long long i = 0; i < n; i++) {
long long left = n-1;
long long right = 0;
while (right <n && left>=0 && right<left) {
if (right == i) {
if (right < n-1) {
right += 1;
}
}
if (left == i) {
if (left > 0) {
left -= 1;
}
}
if (left == right) {
break;
}
if ((inputData[right] + inputData[left]) == inputData[i]) {
cnt += 1;
break;
}
else if ((inputData[right] + inputData[left]) > inputData[i]) {
left -= 1;
}
else if ((inputData[right] + inputData[left]) < inputData[i]) {
right += 1;
}
}
}
cout << cnt;
}
전체 코드는 이렇게 된다 처음에는 2/n 기준으로 양옆으로 펼쳐지면서 값을 찾으려 했으나 이렇게 하면 못찾을 때 가 발생해서 양옆에서 조이는 방식으로 진행 했다
'백준(코테준비) > 이분탐색' 카테고리의 다른 글
백준 12738 (1) | 2024.12.02 |
---|---|
백준 3079/ c++ (0) | 2024.10.21 |