어흥
[백준 2470] 두 용액 (C++) 본문
728x90
반응형
문제 링크: https://www.acmicpc.net/problem/2470
1. 주의할 점
- 이분탐색으로 접근한다(양 끝에서 시작하는 투 포인터)
- 정렬 이후, 이분탐색을 수행한다
2. 구현
- 모든 수를 입력받은 후, 오름차순으로 정렬한다
- Left 포인터를 0, Right 포인터를 Num-1로 설정하고 Al, Ar(출력시킬 정답), Result를 초기화하고 시작한다
- Left 포인터가 Right포인터를 넘지 않을때 까지 While문을 수행하며 서로 가리키는 값을 더하고 절대값을 씌워서 Result의 절대값과 비교한다. 2개를 더한 값이 양수면 R--, 음수면 L++를 수행한다
#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
long long arr[100001];
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int num;
cin >> num;
for (int i = 0; i < num; i++)
cin >> arr[i];
sort(arr, arr + num);
int l = 0, r = num - 1;
long long val, al = arr[l], ar = arr[r], result = al + ar;
while (l < r) {
val = arr[l] + arr[r];
if (abs(result) > abs(val)) {
result = val;
al = arr[l];
ar = arr[r];
}
if (val <= 0) {
l++;
}
else {
r--;
}
}
cout << al << " " << ar;
system("pause");
return 0;
}
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 3709] 레이저빔은 어디로 (C++) (0) | 2020.05.25 |
---|---|
[백준 17835] 면접보는 승범이네 (C++) (0) | 2020.05.24 |
[백준 1981] 배열에서 이동 (C++) (0) | 2020.05.22 |
[백준 1967] 트리의 지름 (C++) (0) | 2020.05.22 |
[백준 17086] 아기 상어 2 (C++) (0) | 2020.05.22 |
Comments