용액 합성하기 문제와 매우 유사하다. 차이가 있다면 0에 가까운 합이 되는 값 자체를 묻는 거 정도?
sum을 확인하면서 l과 r이 업데이트 되기 때문에 처음에 result를 업데이트 시켜야 한다.
//용액
#include <stdio.h>
#include <limits.h>
#include <math.h>
using namespace std;
int arr[100000];
int result = INT_MAX, left, right;
int main(void)
{
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
int l = 0, r = n - 1;
while (l < r)
{
int sum = arr[l] + arr[r];
if (abs(sum) < abs(result))
{
result = sum;
left = l;
right = r;
}
if (sum < 0)
{
l++;
}
else if (sum > 0)
{
r--;
}
else
{
printf("%d %d\n", arr[l], arr[r]);
return 0;
}
}
printf("%d %d\n", arr[left], arr[right]);
return 0;
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준 7785] 회사에 있는 사람 (0) | 2020.11.28 |
---|---|
[백준 1253] 좋다 (0) | 2020.11.27 |
[백준 14921] 용액 합성하기 (0) | 2020.11.27 |
[백준 1822] 차집합 (0) | 2020.11.27 |
[백준 15486] 퇴사 2 (0) | 2020.11.26 |
댓글