PS/Baekjoon Online Judge

[백준 2474] 세 용액 [C]

kimyoungrok 2021. 8. 26. 07:02

백준 - 2474


풀이

"백준 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]);
}

출처 및 참고자료

 

2473번: 세 용액

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

www.acmicpc.net

 

[백준 2470] 두 용액 [C]

풀이 "백준 2467, 용액"과 동일한 문제이다. 단, 입력되는 특성값이 항상 오름차순이라는 문구가 빠졌다. 정렬 후 탐색을 해주자. 소스코드 #include #include #include int compare(const void *a, const void *..

kyr-db.tistory.com

'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