직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다.
생각의 흐름
투포인트 알고리즘을 적용하면 된다.
1) left = 0, right = n-1로 시작해 두 용액의 합을 찾습니다.
2) 두 용액의 합에 대해 절댓값이 기존의 값보다 더 작다면 현재 합을 갱신해줍니다. 그리고 정답에 대한 값 또한 갱신해줍니다.
3) 현재 left과 right의 값 합이 0이면 loop를 탈출, 양수라면 양수가 있을 확률이 있는 right index를 -1, 음수라면 더 큰 값을 더해야하므로 left을 +1 해주면서 값을 찾아간다.
나의 코드
#include <bits/stdc++.h>
using namespace std;
int N;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N;
vector<int> vec(N);
for(int i = 0; i < N; i++){
int num;
cin >> num;
vec[i] = num;
}
sort(vec.begin(), vec.end());
int left = 0;
int right = N-1;
int resA, resB;
int min = 2147000000;
while(left < right) {
int midValue = vec[left] + vec[right];
if(min > abs(midValue)) {
min = abs(midValue);
resA = vec[left];
resB = vec[right];
}
if(midValue < 0) {
left++;
}else if(midValue >= 0) {
right--;
}
}
cout << resA << " " << resB;
return 0;
}
'Algorithm > 백준' 카테고리의 다른 글
[백준][C++] 2473번: 세 용액 <208> (0) | 2022.03.31 |
---|---|
[백준][C++] 2239번: 스도쿠 <207> (0) | 2022.03.30 |
[백준][C++] 16953번: A → B <205> (0) | 2022.03.25 |
[백준][C++] 11779번: 최소비용 구하기2 <204> (0) | 2022.03.24 |
[백준][C++] 1238번: 파티 <203> (0) | 2022.03.23 |
댓글