풀이
"백준 2470, 두 용액"의 응용 문제이다.
세 개의 특성값을 비교해야 하므로, 맨 왼쪽부터 기준이 되는 idx번째 특성값과, idx+1 ~ N-1의 특성값을 더해 0에 가장 가까운 용액을 만들어내는 특성값을 찾으면 된다.
단, 세 개 특성값의 최댓/최솟값이 int 범위를 벗어나므로, llabs()를 사용하고, 연산의 범위를 long long으로 선언했다.
소스코드
#include <stdio.h>
#include <stdlib.h>
#define ll long long
int compare(const void *a, const void *b){
return *(int*)a - *(int*)b;
}
int main(){
int N;
scanf("%d", &N);
int arr[N];
for (int i = 0; i < N; i++)
scanf("%lld", &arr[i]);
qsort(arr, N, sizeof(int), compare);
ll sum = 3e9;
int val[3] = {0};
for (int idx = 0; idx < N-2; idx++){
int left = idx+1, right = N-1;
while (left < right){
ll temp = (ll)arr[idx] + arr[left] + arr[right];
if (llabs(temp) < sum){
sum = llabs(temp);
val[0] = arr[idx];
val[1] = arr[left];
val[2] = arr[right];
}
temp < 0 ? ++left : --right;
}
}
printf("%d %d %d", val[0], val[1], val[2]);
}
출처 및 참고자료
'PS > Baekjoon Online Judge' 카테고리의 다른 글
[백준 1153] 네 개의 소수 [C] (0) | 2021.08.26 |
---|---|
[백준 6588] 골드바흐의 추측 [C] (0) | 2021.08.26 |
[백준 2470] 두 용액 [C] (0) | 2021.08.26 |
[백준 2467] 용액 [C] (0) | 2021.08.26 |
[백준 1005] ACM Craft [C] (0) | 2021.08.25 |