https://www.acmicpc.net/problem/2470
1. 의사코드
1.1 st,en중 누구를 움직일지 결정하라
if (sum1 < 0) s++; // 합이음수->커져야함->음수를 줄임 -> st++
else e--; //합이양수 -> 작아져야함 -> 양수를 줄임 -> e++
1.2 변수 테이블을 정의하라 //ret : 현재까지 값중 0에 가장가까운 합
2. 전체코드
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,ret1= 1000000000*2 ,ret2 = 1000000000 * 2;
vector<int> v;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n;
for (int i = 0; i < n; ++i) {
int temp;
cin >> temp;
v.push_back(temp);
}
sort(v.begin(), v.end());
int ret = 1000000000 * 2; //0에 가장 가까운 합
int e = n-1;
int s = 0;
while (s < e) {
int sum1 = (v[s] + v[e]); //현재합
if (ret > abs(sum1)) { //0에 더 가까운 합이 있는경우 갱신
ret = abs(sum1);
ret1 = v[s];
ret2 = v[e];
if (sum1 == 0) break; //가장최적해인경우 탐색중단
}
if (sum1 < 0) s++; // 합이음수->커져야함->음수를 줄임 -> st++
else e--; //합이양수 -> 작아져야함 -> 양수를 줄임 -> e++
}
cout << ret1 << " " << ret2;
return 0;
}
'Algorithm > 투포인터' 카테고리의 다른 글
백준 22988 재활용캠페인 c++ // 투포인터, /2주의사항, 투포예외처리 (0) | 2024.04.23 |
---|---|
백준 16472 고냥이 c++ // 투포인터, 매개변수탐색, 투포의 핵심아이디어, set 존재여부 조사하는법 (0) | 2024.04.22 |
백준 20922 겹치는건 싫어 c++// 투포인터 정석풀이 형식 (0) | 2023.11.17 |
백준 22862 c++ // 투포인터 응용방법(db 이용) (0) | 2023.11.17 |
백준 13144 List Of Unique Numbers c++ // 투포인터, 배열활용 (0) | 2023.11.14 |