[알고리즘] leetcode 3Sum python

진실·2022년 11월 24일
0

알고리즘

목록 보기
20/22
post-custom-banner

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

class Solution:
    def threeSum(self, nums: list[int]) -> list[list[int]]:
        ans = set()
        nums.sort()
        numDict = dict()

        for num in nums:
            if numDict.get(num):
                numDict[num] += 1
            else:
                numDict[num] = 1
        nums = list(set(nums))
        for x in nums:
            numDict[x] -= 1
            for y in nums:
                if numDict[y] == 0:
                    continue

                numDict[y] -= 1

                z = 0 - x - y

                if numDict.get(z) and numDict[z] > 0 and x >= y >= z:

                    ans.add((x, y, z))

                numDict[y] += 1
            numDict[x] += 1
        ans = list(ans)

        for i in range(len(ans)):
            ans[i] = list(ans[i])

        return ans

triplet 자체를 구하기는 어렵지 않았지만 은근 (-1, 0, 1), (0, -1, 1) 같이 서로 동일한 triplet을 제거하는 게 어려웠다.

나는 x>=y>=z인 경우만 넣어줬는데 뭔가 꼼수 같기도 하고.......

더 나이스한 방법이 있는지 discussion을 함 봐봐야 겠다.

profile
반갑습니다.
post-custom-banner

0개의 댓글