Problem
Solution
1) 변수 및 배열 선언 및 입력 받기
2) 두 개의 포인터를 사용하여 합이 0에 가까운 두 수를 찾기
두 개의 포인터 'left'와 'right'를 배열의 양 끝으로 초기화하고 합이 0에 가까운 두 수를 찾기 위해 'left' 포인터와 ' right' 포인터를 이동시키면서 최적의 값을 찾는다.
반복문은 'left'와 'right'가 같아질 때까지 계속 실행된다. 최솟값을 저장하는 'minVal'을 갱신하면서, 합이 0에 더 가까워질 때마다 그 때의 두 수를 'ans'에 저장한다.
3) 'ans' 벡터에 저장된 두 수를 출력한다.
Answer
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> li(n);
for (int i = 0; i < n; ++i) {
cin >> li[i];
}
int left = 0, right = n - 1;
int minVal = abs(li[left] + li[right]);
vector<int> ans = {li[left], li[right]};
while (left != right) {
if (minVal > abs(li[left] + li[right])) {
minVal = abs(li[left] + li[right]);
ans = {li[left], li[right]};
}
if (li[left] + li[right] >= 0) {
right--;
} else if (li[left] + li[right] < 0) {
left++;
}
}
for (int i : ans) {
cout << i << " ";
}
return 0;
}
'Koala - 11기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[C++] 백준 15686번: 치킨 배달 (0) | 2023.07.30 |
---|---|
[백준/Java] 14499 주사위 굴리기 (0) | 2023.07.30 |
[백준/Python] 2230 수 고르기 (0) | 2023.07.28 |
[ 백준 / Python ] #2531 회전초밥 (0) | 2023.07.27 |
[백준/C++] 1253 좋다 (0) | 2023.07.27 |