반갑습니다!

[백준] 14921용액 합성하기 본문

알고리즘 문제 풀이

[백준] 14921용액 합성하기

김덜덜이 2020. 10. 14. 14:41

풀이

투 포인터 알고리즘을 사용해서 해결했다. 기존의 방식과 조금 변형해서 사용했는데, 시작 인덱스를 0, 끝 인덱스를 n-1로 두었다. 그리고 두 인덱스가 가리키는 용액을 섞어서 0에 가장 가까운 조합을 찾아주었다. 이 때 0에 가장 가깝다는 것은 절대값이 가장 작다는 의미이므로 절댓값 함수 abs()를 사용했다.

코드

C++

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; i++)
cin >> nums[i];
int ans = 1e9 + 1;
int s = 0, e = n - 1;
while (true) {
if (s == e) break;
int sum = nums[s] + nums[e];
if (abs(sum) < abs(ans)) ans = sum;
if (sum > 0) e--;
else if (sum < 0) s++;
else break;
}
cout << ans << '\n';
return 0;
}
view raw 14921.cpp hosted with ❤ by GitHub