[C++][백준 2467] 용액

PublicMinsu·2023년 8월 12일
0

문제

접근 방법

왼쪽, 오른쪽에서 시작하여서 가운데를 향하면 된다.
왼쪽, 오른쪽 중 가운데로 이동하였을 때 더 0에 가까운 경우를 골라서 이동시켜 주면 된다.

코드

#include <iostream>
#include <vector>
using namespace std;
int abs(int num)
{
    return num < 0 ? -num : num;
}
int main()
{
    ios::sync_with_stdio(0), cin.tie(0);
    int N;
    cin >> N;
    vector<int> v(N);
    for (int i = 0; i < N; ++i)
        cin >> v[i];
    int left = 0, right = N - 1, leftNum = v[0], rightNum = v[N - 1];
    while (left < right)
    {
        int sum = abs(v[left] + v[right]);
        if (abs(leftNum + rightNum) > sum)
        {
            leftNum = v[left];
            rightNum = v[right];
        }
        if (abs(v[left + 1] + v[right]) < abs(v[left] + v[right - 1]))
            ++left;
        else
            --right;
    }
    cout << leftNum << " " << rightNum;
    return 0;
}

풀이

입력이 정렬해서 주어지기에 따로 정렬해 줄 필요는 없다.
진행하면서 왼쪽, 오른쪽 합이 0에 가장 가까운 왼쪽, 오른쪽 인덱스를 저장해 주고 출력하면 된다.

profile
연락 : publicminsu@naver.com

0개의 댓글