어흥
[백준 2473] 세 용액 (C++) 본문
728x90
반응형
문제 링크: www.acmicpc.net/problem/2473
1. 주의할 점
- 세 포인터가 아닌 1개 고정 + 두 포인터를 이용해 해결한다
- 포인터가 겹칠 수 없다
- 정답을 오름차순으로 출력한다
2. 구현
- 모든 수를 Arr[] 배열에 받은 후, 오름차순으로 정렬한다
- Result를 3000000001로 설정하여 이보다 0에 가까운 값을 가질 경우, Ans[] 배열과 Result값을 갱신하도록 한다
- 가장 왼쪽의 포인터 K를 고정시킨 후, L과 R을 통해 K+1~Num-1까지의 Arr[] 배열 원소를 두포인터를 이용하여 양끝에서 안쪽으로 탐색한다
- 만약 전체 합이 0보다 작으면 더 큰 값을 더하면 되므로 왼쪽 포인터인 L을 ++한다
- 그 외의 경우에는 더 작은 값을 더하면 되므로 오른쪽 포인터인 R을 --한다
#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
long long arr[5000];
long long ans[3];
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int num;
long long result = 3000000001;
cin>>num;
for(int i=0;i<num;i++)
cin>>arr[i];
sort(arr,arr+num);
for(int k=0;k<num-2;k++){
int l=k+1,r=num-1;
while(l<r){
long long val = arr[k]+arr[l]+arr[r];
if(abs(val) < result){
result = abs(val);
ans[0] = arr[k];
ans[1] = arr[l];
ans[2] = arr[r];
//처리
}
if(val<0) l++;
else r--;
}
}
for(int i=0;i<3;i++)
cout << ans[i]<<" ";
return 0;
}
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 3649] 로봇 프로젝트 (C++) (0) | 2021.02.25 |
---|---|
[백준 2586] 전깃줄 - 2 (C++) (0) | 2021.02.24 |
[백준 1365] 꼬인 전깃줄 (C++) (0) | 2021.02.24 |
[백준 8983] 사냥꾼 (C++) (0) | 2021.02.23 |
[백준 2352] 반도체 설계 (C++) (0) | 2021.02.23 |
Comments