반응형
two pointer문제였습니다.
풀이방법
1. 첫 번째 용액 특성값을 first로 두고 n-2까지 loop를 돕니다.
2. 나머지 first+1 ~ n - 1까지 two pointer로 정답을 찾습니다.
3. 오름차순으로 정렬한 세 특성값을 출력합니다.
Code
#include <iostream>
#include <algorithm>
#include <cmath>
#define ll long long
using namespace std;
ll liquid[5001];
ll answerArr[3];
int n;
void twoPointer(){
ll result = 3e9;
for(int first = 0; first < n - 2; first++){
ll left = first+1;
ll right = n-1;
while(left < right){
ll sum = liquid[left] + liquid[right] + liquid[first];
if(abs(result) > abs(sum)){
result = sum;
answerArr[0] = liquid[first];
answerArr[1] = liquid[left];
answerArr[2] = liquid[right];
}
if(sum>=0) right--;
else left++;
}
}
sort(answerArr,answerArr+3);
}
int main(){
cin >> n;
for(int i = 0; i < n; i++) cin >> liquid[i];
sort(liquid,liquid+n);
twoPointer();
for(int i = 0; i < 3; i++) cout << answerArr[i] << ' ';
}
'Algorithm > Binary Search' 카테고리의 다른 글
(C++) - 백준(BOJ) 2110번 : 공유기 설치 답 (0) | 2020.10.16 |
---|---|
(C++) - 백준(BOJ) 11561번 : 징검다리 답 (0) | 2020.10.03 |
(C++) - 백준(BOJ) 2470번 : 두 용액 답 (2) | 2020.09.14 |
(C++) - 프로그래머스(Programmers) : 징검다리 답 (0) | 2020.08.15 |
(C++) - 프로그래머스(Programmers) : 입국심사 답 (0) | 2020.07.23 |