호지

[백준 알고리즘] 2473번 세 용액 문제풀이 본문

알고리즘/백준

[백준 알고리즘] 2473번 세 용액 문제풀이

_hoji

세 용액의 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;
}
Comments