정화 코딩

[C++] 용액 (백준 2467번) 본문

PS

[C++] 용액 (백준 2467번)

jungh150c 2024. 9. 19. 04:13

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

 

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

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int n;
    cin >> n;
    vector<int> a(n);
    for (int i = 0; i < n; i++) cin >> a[i];

    int l = 0;
    int r = n - 1;
    int dif = 2000000000;
    int la = 0;
    int ra = 0;

    while (l < r) {
        if (abs(a[r] + a[l]) < dif) {
            dif = abs(a[r] + a[l]);
            la = l;
            ra = r;
        }
        if (a[r] + a[l] > 0) r--;
        else l++;
    }

    cout << a[la] << ' ' << a[ra] << '\n';
}

간단한 투 포인터 문제. 포인터 하나는 왼쪽 끝을, 하나는 오른쪽 끝을 가리키는 상태에서 시작한다. 두 용액의 합이 음수면 왼쪽 포인터를 한 칸 오른쪽으로 이동시키고, 양수면 오른쪽 포인터를 한 칸 왼쪽으로 이동시키며 두 용액 합의 절댓값의 최솟값을 찾았다. (AC)

 

'PS' 카테고리의 다른 글

[C++] 도시 분할 계획 (백준 1647번)  (0) 2024.10.07
[C++] 간판 (백준 5534번)  (0) 2024.10.07
[C++] 구슬 탈출 2 (백준 13460번)  (0) 2024.09.19
[C++] 이번학기 평점은 몇점?  (0) 2024.09.16
[C++] 부분합 (백준 1806번)  (0) 2024.09.15
Comments