본문 바로가기
알고리즘

BOJ 2467 - 용액(C++)

by 장중앙 2021. 9. 15.

https://www.acmicpc.net/problem/2467

 

2467번: 용액

첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 오름차순으로 입력되며, 이 수들은 모두 -

www.acmicpc.net

 

풀이

정렬된 상태로 입력되기 때문에 index가 늘어날수록 값이 커짐

0과 size(arr)-1를 left와 right로 저장하여 투포인터 구현

각 탐색마다 (left+right)의 절대값과 MIN값 비교/갱신

 

#include <vector>
#include <iostream>
using namespace std;

int N;
int arr[100001];
int main() {
    cin >> N;
    for (int i = 0; i < N; i++) {
        cin >> arr[i];
    }

    int left = 0;
    int right = N - 1;
    int left_v = arr[left];
    int right_v = arr[right];
    int ans = abs(left_v + right_v);
    while (left < right) {
        int now_sum = (arr[left] + arr[right]);
        if (abs(now_sum) < ans) {
            ans = abs(now_sum);
            left_v = arr[left];
            right_v = arr[right];
        }
        if (now_sum >= 0)
            right--;
        else
            left++;
    }
    cout << left_v << ' ' << right_v;

    return 0;
}

댓글