[ 백준 ] 2470 / 두 용액

金弘均·2021년 9월 16일
0

Baekjoon Online Judge

목록 보기
210/228
post-thumbnail
post-custom-banner

# Appreciation

/*
 * Problem :: 2470 / 두 용액
 *
 * Kind :: Two Pointers
 *
 * Insight
 * - 이 문제... 옛날에 풀었던 문제와 굉장히 비슷하다?
 *   + 14921 / 용액 합성하기
 *     위 문제에서는 특성값이 0에 가장 가까운 값 자체를 구한다면
 *     현재 문제에서는 특성값이 0에 가장 가까운 값을 만드는 두 용액을 구한다
 *     # 14921 과 똑같은 알고리즘에서
 *       답이 갱신될 때마다 그 용액의 값들을 저장하면 되겠다
 *       -> 알고리즘 설명은 링크로 대체하겠다!
 *          https://gglifer-cs.tistory.com/22 <= 날먹
 */

# Code

//
//  BOJ
//  ver.C++
//
//  Created by GGlifer
//
//  Open Source

#include <iostream>
#include <algorithm>

using namespace std;

#define endl '\n'

// Set up : Global Variables
/* None */

// Set up : Functions Declaration
/* None */


int main()
{
    // Set up : I/O
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    // Set up : Input
    int N; cin >> N;
    int A[N];
    for (int i=0; i<N; i++)
        cin >> A[i];

    // Process
    /* 위 설명의 링크 참고 */
    sort(A, A+N);
    int s = 0, e = N-1;
    int val = A[s] + A[e], ans[2] = {A[s], A[e]};
    while (s < e) {
        int sum = A[s] + A[e];
        if (abs(val) > abs(sum)) {
            val = sum;
            ans[0] = A[s], ans[1] = A[e];
        } if (abs(val) == 0) break;

        (sum > 0) ? e-- : s++;
    }

    // Control : Output
    cout << ans[0] << ' ' << ans[1] << endl;
}

// Helper Functions
/* None */
profile
이런 미친 게임을 봤나! - 옥냥이
post-custom-banner

0개의 댓글