반응형
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);
}
'Algorithm > Binary Search' 카테고리의 다른 글
(C++) - 백준(BOJ) 11561번 : 징검다리 답 (0) | 2020.10.03 |
---|---|
(C++) - 백준(BOJ) 2473번 : 세 용액 답 (0) | 2020.09.21 |
(C++) - 프로그래머스(Programmers) : 징검다리 답 (0) | 2020.08.15 |
(C++) - 프로그래머스(Programmers) : 입국심사 답 (0) | 2020.07.23 |
(C++) - 프로그래머스(Programmers) : 예산 답 (0) | 2020.07.23 |