반응형

https://www.acmicpc.net/problem/2473

 

2473번: 세 용액

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

www.acmicpc.net

 

먼저 용액을 정렬해준 뒤, 기준 값을 하나 잡아줍니다.

기준 값을 제외한 나머지 용액에서 두 용액을 선택하며, 그 합의 절댓값이 최소가 되는 용액을 찾아줍니다.

 

#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;

int n, a1, a2, a3;
int arr[5000];
long long diff = 1e11;

int main() {
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
		scanf("%d", &arr[i]);
	sort(arr, arr + n);
	for (int i = 0; i < n - 2 && diff; i++) {
		int l = i + 1;
		int r = n - 1;
		while (l < r && diff) {
			long long s = (long long)arr[l] + arr[r] + arr[i];
			if (diff > abs(s)) {
				a1 = i;
				a2 = l;
				a3 = r;
				diff = abs(s);
			}
			if (s > 0) r--;
			else l++;
		}
	}
	printf("%d %d %d", arr[a1], arr[a2], arr[a3]);
}
반응형

'Algorithm' 카테고리의 다른 글

백준 18808 : 스티커 붙이기  (0) 2021.11.16
백준 2571 : 색종이 - 3  (0) 2021.11.16
백준 3101 : 토끼의 이동  (0) 2021.11.16
백준 12904 : A와 B  (0) 2021.11.16
백준 16197 : 두 동전  (0) 2021.11.16

+ Recent posts