백준문제풀이
백준 문제 14921번 용액 합성하기 문제풀이 c++
노가다 김씨
2022. 3. 20. 22:30
https://www.acmicpc.net/problem/14921
14921번: 용액 합성하기
홍익대 화학연구소는 다양한 용액을 보유하고 있다. 각 용액은 -100,000,000부터 100,000,000사이의 특성 값을 갖는데, 같은 양의 두 용액을 혼합하면, 그 특성값은 두 용액의 특성값의 합이 된다. 당
www.acmicpc.net
문제해석
이런 비슷한 문제를 예전에 풀었을때 이분 탐색 비슷하게 풀었는데 투 포인터로도 풀 수있는걸 확인하고 이번엔 그렇게 풀어보았다.
입력이 정렬 된 상태로 들어오기 때문에 정렬하진 않았지만 그렇지 않다면 정렬을 한다.
처음과 끝을 가리키는 포인터를 두고 절댓값이 큰 쪽의 포인터를 이동 하는 식으로 서로의 포인터가 교차할때까지 반복한다.
물론 포인터가 움직일때마다 용액의 특성이 더 0에 가까워지면 답을 업데이트 해준다.
이렇게 작성하면 이분탐색보다 훨씬 짧고 간결하게 작성 하는것이 가능했다.
코드
#include <iostream>
#include <cmath>
using namespace std;
int a[100000];
int ans=999999999;
int main(){
cout.tie(NULL);
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int n;
cin>>n;
for(int i=0; i<n; i++)
{
cin>>a[i];
}
int start=0;
int end=n-1;
while(start<end)
{
if(abs(a[start]+a[end])<abs(ans))
{
ans=a[start]+a[end];
}
if(abs(a[start])<abs(a[end]))
{
end=end-1;
}
else
{
start=start+1;
}
}
cout<<ans;
}