https://www.acmicpc.net/problem/2470
정렬 및 이분탐색 문제이다.
숫자 범위가 -10억~10억 이므로, 두개의 숫자를 합쳐도 20억을 넘어가지 않기 때문에 long long 이 아닌 int로 해결하였다.
숫자를 먼저 오름차순으로 정렬하고, 왼쪽 포인터는 0 오른쪽 포인터는 N-1부터 시작하였다.
L<R인 동안 각 포인터가 가리키고 있는 숫자의 합이 음수면 L++, 반대면 R--을 하여 해결하였다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int N,n,L,R;
int result= 2000000001;
vector<int> v;
int finalL, finalR;
int main() {
cin >> N;
for (int i = 0; i < N; i++){
cin >> n;
v.push_back(n);
}
sort(v.begin(), v.end());
L = 0; R = N - 1;
int tmpSum;
while (L < R) {
tmpSum = v[L] + v[R];
if (result > abs(tmpSum)) {
result = abs(tmpSum);
finalL = v[L];
finalR = v[R];
}
if (tmpSum > 0)R--;
else L++;
}
cout << finalL << " " << finalR << endl;
}
'Algorithm > 자료구조' 카테고리의 다른 글
[프로그래머스] 코딩테스트 고득점 Kit - 힙(HEAP) (JAVA) (0) | 2021.10.02 |
---|---|
[프로그래머스] 코딩테스트 고득점 Kit - 스택/큐 (JAVA) (0) | 2021.10.02 |
[프로그래머스] 코딩테스트 고득점 Kit - 해시 (JAVA) (0) | 2021.09.30 |
[백준] 5430번 : AC (C++) (0) | 2021.08.23 |
댓글