Leetcode Java 3sum Closest
업데이트:
문제
코드
class Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int result = nums[0] + nums[1] + nums[nums.length - 1];
for (int idx = 0; idx < nums.length - 2; idx++) {
int start = idx + 1;
int end = nums.length - 1;
while (start < end) {
int sum = nums[idx] + nums[start] + nums[end];
if (Math.abs(target - result) > Math.abs(target - sum)) {
result = sum;
}
if (sum > target) {
end--;
} else {
start++;
}
}
}
return result;
}
}
결과
설명
-
주어진 정수 배열 nums를 오름차순 정렬한다.
- 주어진 정수 target의 인접한 세 값의 합을 저장할 result 변수의 초기값을 $nums[0] + nums[1] + nums[nums.length - 1]$로 초기화 한다.
- 임의의 값을 부여하면, target의 값과 유사한 값이 초기 값으로 설정될 수 있으므로 반복의 첫 값으로 초기화한다.
- 반복을 통해 첫 값을 제외한 두 pointer의 역할을 수행할 변수 start는 $idx + 1$로, 변수 end는 $nums.length - 1$로 설정해서 첫 pointer인 idx 이후의 값을 순차 탐색할 수 있도록 한다.
- 반복은 start 변수의 값이 end 변수의 값보다 작을(마주치지 않을) 때까지 반복한다.
- 임시로 세 pointer의 배열 값을 더하여 sum 변수를 설정한다.
- 만일 $target - result$의 절대값이 $target - sum$ 보다 클 경우에 result 변수에 sum 변수의 값을 주입한다.
- 만일 sum 변수의 값이 target의 값보다 크면 작은 값을 더해야 하므로 변수 end의 값을 내리고, 그렇지 않으면 변수 start의 값을 올려 더 큰 값을 더할 수 있도록 하여 반복을 계속 수행한다.
- 반복이 완료되면 세 값의 합이 target과 가장 인접한 result 변수를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기