알고리즘/백준
[백준 알고리즘] 2473번 세 용액 문제풀이
_hoji
2022. 11. 28. 18:01
세 용액의 ph지수의 합이 0에 가까운 경우를 구하는 문제이다.
용액이 2개라하면 정렬된 리스트에서 이분탐색을 통해 0에 가까운 값을 구할 수 있다.
따라서 이분 탐색을 이용하기 위해
가장 ph지수가 낮은 값부터 순차적으로 용액을 뽑고(for문)
그 뽑힌 용액보다 ph지수가 높은 값들 중에서 2개를 뽑아
총 3개의 용액의 합 중 0에 가까운 값을 구하여,
이 때의 세 용액의 특성값을 출력한다.
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int main(){
int n;
long long result[3];
long long value = 9000000000;
long long list[5000];
cin >> n;
for(int i=0; i<n; i++){
cin >> list[i];
}
sort(list, list + n);
for(int x = 0; x < n-2; x++){
int l = x + 1, r = n - 1;
while(l < r){
long long sum = list[x] + list[l] + list[r];
if(abs(sum) < value){
value = abs(sum);
result[0] = list[x];
result[1] = list[l];
result[2] = list[r];
}
if(sum < 0)
l++;
else
r--;
}
}
cout << result[0] << " " << result[1] << " " << result[2] << endl;
return 0;
}