기타/백준일지
[백준] 2470번 두 용액
민지기il
2025. 1. 18. 10:38
#include <bits/stdc++.h>
#define fastio cin.tie(0)->sync_with_stdio(0)
#define INF 2000000001
typedef long long ll;
using namespace std;
// 투포인터
int main(){
fastio;
int n; cin>>n;
vector<int> v(n);
for(int i=0; i<n; i++){
cin>>v[i];
}
sort(v.begin(), v.end());
int minValue =INF;
int left = 0, right=n-1;
int minLeft = 0;
int minRight = 0;
while(left != right){
int sum = v[left]+v[right];
if(minValue > abs(sum))
{
minValue = abs(sum);
minLeft = v[left];
minRight = v[right];
}
if(sum>0)
right--;
else
left++;
}
cout<<minLeft<<' '<<minRight;
return 0;
}
<풀이>
참고 사이트: https://velog.io/@ooo1324/%EB%B0%B1%EC%A4%80-2470%EB%B2%88-%EB%91%90-%EC%9A%A9%EC%95%A1-C
벡터에 입력받아 오름차순으로 정렬하고 left / right 포인터를 움직여서 0에 가깝게 이동시킨다.
#include <bits/stdc++.h>
#define fastio cin.tie(0)->sync_with_stdio(0)
using namespace std;
int main(){
int N; cin>>N;
vector <int> liq(N);
for(int i=0; i<N; i++){
cin>>liq[i];
}
int ans1, ans2;
int INF=2e9;
for(int i=0; i<N-1; i++){
for(int j=i+1; j<N; j++){
int sum=liq[i]+liq[j];
if(abs(sum)<INF){
INF=abs(sum);
ans1=liq[i];
ans2=liq[j];
}
}
}
if(ans1>ans2) swap(ans1, ans2);
cout<<ans1<<" "<<ans2<<endl;
return 0;
}
이렇게 하면 시간초과가 난다..