Post

leetcode(리트코드)15-3Sum

leetcode 15 - 3Sum 문제입니다.

1. 문제

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


2. Input , Output


3. 분류 및 난이도

Medium 난이도 문제입니다.
leetcode Top 100 Liked의 첫 번째 문제입니다.


4. 문제 해석

  • 세 숫자의 합이 0이되는 세 숫자를 찾고 result vector에 넣어야합니다. 중복이 있으면 안됩니다.
  • 중복 처리를 해주느라 시간을 많이써서 솔루션을 보고 이해했습니다.

  • 정렬을 해준 뒤 앞의 원소를 c를 두고 앞 뒤에서 합을 이용해 찾습니다.

5. code

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>> result;
        sort(nums.begin(),nums.end());
        
        for(size_t i=0;i<nums.size();++i)
        {
            int target = -nums[i];
            int front = i+1;
            int back = nums.size()-1;
            
            //모두 양수로 들어올 경우
            if(target <0)
                break;
            else
            {
                while(front<back)
                {
                    int sum = nums[front] + nums[back];
                    if(target>sum)
                        ++front;
                    else if(target<sum)
                        --back;
                    //같은 경우
                    else
                    {
                        vector<int> temp(3,0);
                        temp[0] = nums[i];
                        temp[1] = nums[front];
                        temp[2] = nums[back];
                        result.push_back(temp);
                    
                        //[-2,0,0,2,2]
                        //-2 target index(1) 0 = front index(4) 2 = back인 경우 -2,0,2 추가되는데 밑의 처리를 해주지 않으면 그 다음 인덱스인 (2) 0 = front (3) 2 = back이 또 다시 중복으로 들어가게됨.
                        while(front<back && nums[front] == temp[1]) ++front;
                        while(front<back && nums[back] == temp[2])--back;
                        
                    }
                }
                while(i+1<nums.size() && nums[i+1] == nums[i])
                    ++i;
            }
        }    
        
        
        
        return result;
    }
};

6. 결과 및 후기, 개선점

시간
솔루션을 보았으니 사진을 넣지 않겠습니다.

This post is licensed under CC BY 4.0 by the author.