https://www.acmicpc.net/problem/2467
풀이
정렬된 상태로 입력되기 때문에 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;
}
'알고리즘' 카테고리의 다른 글
Programmers - 최소직사각형(C++) (0) | 2021.09.29 |
---|---|
Programmers - 퍼즐 조각 채우기(C++) (0) | 2021.09.24 |
Programmers - 직업군 추천하기 (0) | 2021.09.15 |
Programmers - 상호평가 (0) | 2021.09.14 |
Programmers - 부족한 금액 계산하기 (0) | 2021.09.14 |
댓글