https://leetcode.com/problems/3sum-closest/
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
int rtn;
sort(nums.begin(), nums.end());
int nums_size = nums.size();
int left_idx = 0;
int right_idx = nums_size;
int cur;
rtn = nums[0] + nums[1] + nums[2];
// n-2개 순회, 왜? left, right는 n보다 앞
for(int i=0; i< nums_size-2; i++){
right_idx = nums_size-1;
left_idx = i+1;
while(left_idx < right_idx){
cur = nums[i] + nums[left_idx] + nums[right_idx];
if(abs(cur - target) < abs(rtn - target)){
// 현재 계산된 값이 정답에 가까우면 바꿔줌
rtn = cur;
}
if(cur < target) left_idx++;
else if(cur > target) right_idx--;
else return rtn;
}
}
return rtn;
}
};
int main() {
Solution sol;
//Input: nums = [-1,2,1,-4], target = 1
//Output: 2
vector<int> nums{-1,2,1,-4};
int target = 1;
auto ans = sol.threeSumClosest(nums, target);
cout << ans << endl;
return 0;
}