186 words
1 minutes
[BOJ] 좋다
TimeLimit | MemoryLimit | Condition | TAG |
---|---|---|---|
2s | 256MB | 1 ≤ N ≤ 2,000 abs(A_i) ≤ 1,000,000,000 | Sort, Two Pointer |
문제 자체가 전형적인 binary search를 하는거였고, 그냥 투 포인터로 자기 자신 예외처리 후 AC
ll을 unsigned로 해놔서 오류를 못 찾았었다..
정답 코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
using ll = long long;
int n;
ll board[2001];
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n;
for(int i = 0; i < n; i++){
cin >> board[i];
}
sort(board, board+n);
int result = 0;
if(n <= 2) {
cout << 0;
return 0;
}
for(int i = 0; i < n; i++){
int right = n-1 == i ? n-2 : n-1;
int left = i == 0;
while(left < right){
ll current = board[left] + board[right];
if(board[i] == current){
result ++;
break;
}
else if(board[i] < current){
if(i == right-1) right--;
right--;
}else{
if(i == left+1) left++;
left++;
}
}
}
cout << result;
return 0;
}