반응형
https://www.acmicpc.net/problem/2473
먼저 용액을 정렬해준 뒤, 기준 값을 하나 잡아줍니다.
기준 값을 제외한 나머지 용액에서 두 용액을 선택하며, 그 합의 절댓값이 최소가 되는 용액을 찾아줍니다.
#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 |