문제: 2467번: 용액
basic-algo-lecture/workbook/0x13.md at master · encrypted-def/basic-algo-lecture
basic-algo-lecture/workbook/0x13.md at master · encrypted-def/basic-algo-lecture
바킹독의 실전 알고리즘 강의 자료. Contribute to encrypted-def/basic-algo-lecture development by creating an account on GitHub.
github.com
#include <iostream>
#include <vector>
#include <queue>
#include <stack>
#include <algorithm>
#include <cmath>
#include <limits>
#include <string>
using namespace std;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
vector<long long> solutions(n);
for (int i = 0; i < n; i++)
cin >> solutions[i];
int st = 0;
int en = n - 1;
long long ans1 = 2147483647;
long long ans2 = 2147483647;
while (st < en) {
if (abs(ans1 + ans2) > abs(solutions[st] + solutions[en])) {
ans1 = solutions[st];
ans2 = solutions[en];
}
if (abs(solutions[st] + solutions[en - 1]) <= abs(solutions[st + 1] + solutions[en]))
en--;
else
st++;
}
cout << ans1 << " " << ans2;
return 0;
}
음.. 나는 아무리 생각해도 투포인터 방법밖에 모르겠는데 이분 탐색으로 푸는 방법도 있었다. for 문 돌면서 해당 요소랑 같이 더했을 때 0에 가까운 애를 이분탐색으로 찾아주면 된다고 한다..
참고자료:
[이분 탐색,투포인터/파이썬] 백준 2467번 용액
https://www.acmicpc.net/problem/24671번째부터 n-1번째 수들마다 오른쪽에 있는 용액들을 이분탐색해서 합이 0에 가까운 수를 찾고 기존 답과 비교하는 형식으로 풀었다.구글링을 해보니 이분탐색이 아닌
velog.io