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;
}
'백준문제풀이' 카테고리의 다른 글
백준 문제 24552번 올바른 괄호 문제풀이 c++ (0) | 2022.03.20 |
---|---|
백준 문제 1644번 소수의 연속합 문제풀이 c++ (0) | 2022.03.20 |
백준 문제 14926번 Not Equal 문제풀이 c++ (0) | 2022.03.20 |
백준 문제 14927번 전구 끄기 문제풀이 c++ (0) | 2022.03.20 |
백준 문제 1509번 팰린드롬 분할 문제풀이 c++ (0) | 2022.03.20 |