Algorithm/LeetCode
[array] 3sum closest
sw_develop
2025. 4. 5. 12:28
✅ Problem
https://leetcode.com/problems/3sum-closest/description/
✅ Approach & Solution
방식) 정렬 후 투 포인터 사용
더보기
- 3개를 찾아야 할 때 : 1개는 고정해두고 나머지 2개를 찾자
- 나머지 2개 찾을 때 투 포인터 사용
- 정렬 필수 (배열의 인덱스 값 활용하지 않기 때문에 정렬 가능)
class Solution {
public int threeSumClosest(int[] nums, int target) {
int result = 0; // 반환할 세 수의 합
int minDiff = Integer.MAX_VALUE; // target과 세 수의 합의 최소 차이
int left, right, sum;
Arrays.sort(nums);
for (int i = 0; i < nums.length - 2; i++) {
if (i > 0 && nums[i] == nums[i-1]) { // 중복값은 skip
continue;
}
// 나머지 2개 찾기
left = i + 1;
right = nums.length - 1;
while (left < right) {
sum = nums[i] + nums[left] + nums[right];
if (sum > target) {
if (sum - target < minDiff) {
minDiff = sum - target;
result = sum;
}
// right 포인터 조정 (중복 값 나오지 않을 때까지)
while (left < right && nums[right] == nums[right - 1]) {
right -= 1;
}
right -= 1;
} else if (sum < target) {
if (target - sum < minDiff) {
minDiff = target - sum;
result = sum;
}
// left 포인터 조정 (중복 값 나오지 않을 때까지)
while (left < right && nums[left] == nums[left + 1]) {
left += 1;
}
left += 1;
} else { // sum == target
return sum;
}
}
}
return result;
}
}