# 문제 설명
- 3 수의 합이 0이 되는 수 조합을 리턴하는 문제
- 오름차순 정렬, 순회하는 요소 하나를 고정하고 투포인터 문제로 변경
- 최종 복잡도는 O(N^2)
- 오름차순 정렬이 되어있으므로 선택된 요소 합이 0보다 작으면 왼쪽 포인터를 한칸 오른쪽으로 이동하여 합 값을 키운다.
- 동일한 로직으로 선택된 요소 합이 0보다 크면 오른쪽 포인터를 한칸 왼쪽으로 이동하여 합 값을 줄인다.
class Solution {
func threeSum(_ nums: [Int]) -> [[Int]] {
var sortedNums = nums.sorted()
var result: Set<[Int]> = .init()
for i in 0..<sortedNums.count {
var left = i + 1
var right = sortedNums.count - 1
while(left < right) {
let sum = sortedNums[i] + sortedNums[left] + sortedNums[right]
if sum == 0 {
result.insert([
sortedNums[i],
sortedNums[left],
sortedNums[right]
])
left += 1
right -= 1
} else if sum < 0 {
left += 1
} else {
right -= 1
}
}
}
return Array(result)
}
}