[백준] 2467번: 용액
2022. 9. 12. 12:44ㆍTIL💡/Algorithms
https://www.acmicpc.net/problem/2467
보자마자 투포인터로 인식은 했으나 양 포인터를 어떻게 움직일지에 대해 조금 더 고민했던 문제이다.
물론 틀릴 정도로는 어렵지 않다. 휴리스틱하게 생각해봐도 떠올리기 쉬운 기준이다.
두 용액의 합이 최대한 0에 가까워야하므로, 왼쪽, 오른쪽 포인터를 비교했을 때 0으로부터 먼 포인터를 안쪽으로 이동시킨다.
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int main(){
int n, left = 0, right = 0;
int result = 2e9;
cin >> n;
vector<int> liquid(n);
for(int i = 0;i < n;i++) {
cin >> liquid[i];
}
int lpr = 0;
int rpr = n - 1;
while(lpr < rpr) {
int value = liquid[lpr] + liquid[rpr];
if(abs(value) < result) {
result = abs(value);
left = lpr;
right = rpr;
}
if(abs(liquid[lpr]) < abs(liquid[rpr])) {
rpr--;
}
else{
lpr++;
}
}
printf("%d %d", liquid[left], liquid[right]);
}
'TIL💡 > Algorithms' 카테고리의 다른 글
[백준] 1927번: 최소 힙 (0) | 2022.09.12 |
---|---|
[백준] 1976번: 여행 가자 (0) | 2022.09.12 |
[백준] 1446번: 지름길 (0) | 2022.09.12 |
[백준] 1, 2, 3 더하기 4 (0) | 2022.09.12 |
[백준] 5972번: 택배 배송 (0) | 2022.09.09 |