짱아의 개발 기록장

LeetCode : 16. 3Sum Closest 본문

Algorithm/LeetCode

LeetCode : 16. 3Sum Closest

jungahshin 2021. 1. 12. 11:57
반응형

앞서 풀었던 3Sum문제와 거의 동일하지만 조금 더 쉽다고 할 수 있다.

3Sum은 각각의 요소들을 직접 출력해야 했지만 이 문제는 그냥 가장 가까운 값의 합만 출력하면 되기 때문!

 

[메인 로직]

풀이는 거의 동일하지만,

int diff라는 변수를 INT_MAX로 초기화하고 차이(abs(sum-target))가 더 작은 값들을 발견하면 계속적으로 갱신해주면 된다.

단! diff에 abs(sum-target)값을 넣어주면 나중에 정확히 sum을 구하기 어렵기 때문에 그냥 sum-target을 저장한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        int diff = INT_MAX;
        sort(nums.begin(), nums.end());
        
        for(int i=0; i<nums.size(); i++){
            int low = i+1;
            int high = nums.size()-1;
            
            while(low<high){
                int sum = nums[i]+nums[low]+nums[high];
                if(abs(sum-target)<abs(diff)){
                    diff = sum-target;
                }
                
                if(sum>target){
                    high--;
                }else{
                    low++;
                }
            }
        }
        
        return diff+target;
    }
};
cs
반응형
Comments