백준 2467 용액 - C++

JangGwon·2022년 10월 10일
0

문제링크 : https://www.acmicpc.net/problem/2467

문제설명

풀이

투포인터 알고리즘을 이용하면 쉽게 풀 수 있는 문제였다.
오름차순으로 정렬된 배열에 양쪽에서 조여오면서, 두 개의 합이 0에 가장 가까운 경우를 저장해서 출력하였다.

코드

#include <iostream>

using namespace std;

int map[100001];

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    int a;
    cin >> a;
    int left = 1;
    int right = a;
    int mins = 2147483647;
    int lefta;
    int righta;

	for (int i = 1; i <= a; i++)
    {
        cin >> map[i];
    }
    
    while (left < right)
    {
        int sum = (map[left] + map[right]);
        if (abs(sum) < mins)
        {
            mins = abs(sum);
            lefta = map[left];
            righta = map[right];
        }
        if (sum < 0)
        {
            left++;
        }
        else
        {
            right--;
        }
    }
    cout << lefta << " " << righta;
    return 0;
}

0개의 댓글