코딩테스트 준비/leetcode

16. 3Sum Closest

MAKGA 2021. 8. 5. 21:31
320x100

https://leetcode.com/problems/3sum-closest

 

3Sum Closest - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

임의의 정수(-10^3 ~ 10^3) 목록이 주어졌을 때, 3개의 숫자를 더해 주어진 목표 값과 가장 가까운 합을 구하는 문제다.

15. 3Sum

직전에 풀었던 문제(15. 3Sum)는 case를 구하는 문제였으므로 중복을 제거해 연산 수를 줄였지만, 이 문제는 동일한 숫자도 덧셈에 활용될 수 있어 중복 수는 제거하면 안되고, 목표 값과 3개의 합계가 동일할 때 로직을 종료시키는 방법으로 최적화한다.

 

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        int min_diff = 9999999;
        sort(nums.begin(), nums.end());
        
        for (int i=0; i<nums.size(); ++i)
        {
            int l = i + 1;
            int r = nums.size() - 1;
            
            while (l < r)
            {
                int sum = nums[i] + nums[l] + nums[r];
                
                if (abs(target - sum) < abs(target - min_diff)) {
                    min_diff = sum;
                }
                
                if (min_diff == target) {
                    break;
                }
                
                if (sum < target) {
                    ++l;
                }
                else {
                    --r;
                }
            }
        }
        
        return min_diff;
    }
};

320x100

'코딩테스트 준비 > leetcode' 카테고리의 다른 글

53. Maximum Subarray  (0) 2021.08.06
35. Search Insert Position  (0) 2021.08.06
15. 3Sum  (0) 2021.08.04
70. Climbing Stairs  (0) 2021.08.03
129. Sum Root to Leaf Numbers  (0) 2021.08.02