[리트코드] 15. 3Sum

2024. 7. 4. 17:33PS/리트코드

728x90

문제 링크

https://leetcode.com/problems/3sum/description/?source=submission-noac

느낀 점

좋은 문제라고 생각했다. 투 포인터 문제 풀이 방식을 익힐 수 있다고 생각했기 때문이다. 하지만, 이전 원소와의 중복을 제거해주지 않으면 시간 초과가 나버리거나 중복으로 인해 정답이 틀리는 고약한 문제였다.. 나는 중복 배열을 없애기 위해 리스트를 만들고 존재하는지를 검사해주었는데, 그것 때문에 시간 초과가 계속 났음..

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        answer = []
        nums.sort()
        for i in range(len(nums) - 2):
            if i > 0 and nums[i] == nums[i - 1]:
                continue
            s, e = i + 1, len(nums) - 1
            while s < e:
                sum_list = [nums[i], nums[s], nums[e]]
                if sum(sum_list) < 0:
                    s += 1
                elif sum(sum_list) > 0:
                    e -= 1
                else:
                    answer.append(sum_list)
                    while s < e and nums[s] == nums[s + 1]:
                        s += 1
                    while s < e and nums[e] == nums[e - 1]:
                        e -= 1
                    s += 1
                    e -= 1
        return answer