BOJ 2467 : 용액

·2023년 1월 29일
0

알고리즘 문제 풀이

목록 보기
45/165
post-thumbnail

풀이 요약

투 포인터를 이용한 문제.

풀이 상세

  1. 현재 입력 값의 최대, 최소를 시작으로 두 용액을 더했을 때, 기존의 특성 값보다 작은 경우, 현재의 llrr 을 업데이트 한다.

  2. 입력값의 숫자들은 오름차순으로 들어온다. l=0l=0 이고 r=N1r=N-1 인 경우 ll 이 커질수록 midmid 값은 더 커지고, rr 이 작아질수록 midmid 값은 더 작아진다.

  3. 만약 현재 특성 값이 0 보다 큰 경우라면 rr 을 줄여주고, 현재 특성 값이 0 보다 작은 경우라면, ll 값을 높여주면서 탐색을 한다.

#include <bits/stdc++.h>
using namespace std;
vector<int> arr;
int N, tmp, l, r, sum, ansL, ansR;
int main() {
    cin >> N;
    for (int i = 0; i < N; i++) {
        cin >> tmp;
        arr.push_back(tmp);
    }
    l = ansL = 0;
    r = ansR = N - 1;
    sum = abs(arr[l] + arr[r]);
    while (l < r) {
        int mid = arr[l] + arr[r];
        if (sum > abs(mid)) {
            sum = abs(mid);
            ansL = l;
            ansR = r;
        }
        if (mid < 0) l++;
        else r--;
    }
    cout << arr[ansL] << " " << arr[ansR];
}
profile
새로운 것에 관심이 많고, 프로젝트 설계 및 최적화를 좋아합니다.

0개의 댓글