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;
}

