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을 함 봐봐야 겠다.