본문 바로가기

Algorithm/Binary Search

(C++) - 백준(BOJ) 2470번 : 두 용액 답

반응형

www.acmicpc.net/problem/2470

 

2470번: 두 용액

첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00

www.acmicpc.net

Two Pointer 문제였습니다.

 

풀이방법 

 1. 두 용액의 특성값을 더했을때 기존에 있던 결과값보다 작다면 갱신

 2. 두 용액의 특성값 합이 0이하면 left pivot을 ++

 3. 두 용액의 특성값 합이 0초과면 right pivot을 --

 4. 최종 결과값 출력

 

Code

#include <iostream> 
#include <algorithm> 
#include <cmath> 
#include <vector> 
using namespace std; 
vector <int> liquid; 
int n; 
void twoPointer(int n){ 
    int left = 0; 
    int right = n-1; 
    int rightValue, leftValue, sum = 0; 
    int result = 0x7f7f7f7f; 
    while(left<right){ 
        sum = (liquid[left] + liquid[right]); 
        if(abs(result) > abs(sum)){ 
            result = sum; 
            leftValue = liquid[left]; 
            rightValue = liquid[right]; 
        } 
        if(sum <= 0) left++; 
        else right--; 
    } 
    cout << leftValue << ' ' << rightValue <<'\n'; 
} 
int main(){ 
    cin >> n; 
    for(int i = 0; i <n; i++){ 
        int feature; 
        cin >> feature; 
        liquid.push_back(feature); 
    } 
    sort(liquid.begin(),liquid.end()); 
    twoPointer(n); 
}