용액 문제에서 3가지 용액으로 바뀐 문제. 한 가지의 용액을 고정시켜놓고 나머지 용액에 대해서 투포인터로 흝으면서 0에 가장 가까운 조합을 찾으면 된다.
필요한 부분만 롱롱으로 선언해줬고, 분명 맞는데 틀려서 삽질하다가 정수형 용액을 3개 더할때 overflow가 발생한다는 것을 뒤늦게 깨닫았다. 코테에서는 그냥 맘 편하게 전부 롱롱으로 선언하는게 확실할 것 같다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
using ll = long long;
int arr[5000];
int main(){
ios::sync_with_stdio(0); cin.tie(0);
int n, idx = 0; cin >> n;
for(int i = 0 ; i < n; ++i) cin >> arr[i];
sort(arr, arr+n);
int m1, m2, m3;
ll mSum = 3e9+1;
for(int i = 0; i < n-2; ++i){
int s = i + 1, e = n-1;
while(s < e){
ll sum = 1LL*arr[s] + arr[e] + arr[i];
if(abs(sum) < mSum){
m1 = arr[i]; m2 = arr[s]; m3 = arr[e];
mSum = abs(sum);
}
if(sum <= 0) s++;
else e--;
}
}
cout << m1 << " " << m2 << " " << m3;
}
백준 1806 부분합 혼내주기 (0) | 2021.08.01 |
---|---|
백준 15961 회전 초밥 혼내주기 (0) | 2021.08.01 |
백준 20181 꿈틀꿈틀 호석 애벌레 - 효율성 혼내주기 (0) | 2021.08.01 |
백준 20167 꿈틀꿈틀 호석 애벌레 - 기능성 혼내주기 (0) | 2021.08.01 |
백준 2096 내려가기 혼내주기 (0) | 2021.08.01 |
댓글 영역