https://www.acmicpc.net/problem/2473
이 문제는 3개를 어떻게 할까 고민하다가 그냥 1개를 정해놓고 0의 가장 가까운 투포인터를 하면 되겠다는 생각을 했다 즉 하나의수는 고정인 상태에서 0보다크면 혹은 작으면 에 대해서 m값과 r값을 바꿔주면서 최솟값을 저장하는 방식으로 진행했다
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <vector>
using namespace std;
int n;
vector<long long> inputData;
long long result = 3000000001;
long long ans[3];
int main() {
cin >> n;
long long tmp;
for (int i = 0; i < n; i++) {
cin >> tmp;
inputData.push_back(tmp);
}
sort(inputData.begin(), inputData.end());
int l, m, r;
for (int l = 0; l < n - 2; l++) {
m = l + 1;
r = n - 1;
while (m < r) {
long long val = inputData[l] + inputData[m] + inputData[r];
if (abs(val) < result) {
result = abs(val);
ans[0] = inputData[l];
ans[1] = inputData[m];
ans[2] = inputData[r];
}
if (val < 0) {
m++;
}
else {
r--;
}
}
}
for (int i = 0; i < 3; i++) {
cout << ans[i] << " ";
}
}
'백준(코테준비) > 증가수열&투포인터' 카테고리의 다른 글
백준 27651 / CPP / 투포인터 / 이분탐색 (0) | 2025.03.19 |
---|---|
프로그래머스 조이스틱 / C++ / 투포인터 (0) | 2024.08.24 |
백준 2631 / C++ (0) | 2024.08.09 |
백준 14719 (0) | 2024.07.31 |
백준 1644 (0) | 2024.07.26 |