Published:
Updated:

  • Reference
  • set νŠœν”Œμ„ μ΄μš©ν•˜μ—¬ 쀑볡을 κ±ΈλŸ¬μ£ΌλŠ” 방법을 μ‚¬μš©ν–ˆλŠ”λ° λ­”κ°€ μ’€ μ°μ°ν–ˆλ‹€.
    • Bardν•œν…Œ λ¬Όμ–΄λ³΄λ‹ˆ $O(1)$이라고 ν•œλ‹€.
    • 일단은 신경쓰지 말아야지


Solution

from typing import List


class Solution:
    # 3개 λ”ν•΄μ„œ 0이 λ˜λŠ” 경우의 배열을 계속 append
    # μ™„μ „ νƒμƒ‰μœΌλ‘œ ν•˜λ €λ©΄ n^3 될 κ±° 같은데 νˆ¬ν¬μΈν„°λ‘œ ν•œλ²ˆ n^2 λ§Œλ“€μ–΄ 보자
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        set_answer = set()

        # κ΅¬ν˜„ν•˜κΈ° νŽΈν•˜λ„λ‘ 였λ₯Έμ°¨μˆœ μ •λ ¬ν•΄ λ‘μž
        nums.sort()

        # 일단 이 반볡문이 전체 λΌˆλŒ€λ₯Ό μž‘μ•„μ€„ 수 μžˆλ„λ‘ ν•˜μž
        for i, num in enumerate(nums):
            if i > 0 and nums[i] == nums[i - 1]:
                continue

            # nums[i]λ₯Ό μ€‘μ‹¬μœΌλ‘œ [i + 1 : -1]κΉŒμ§€μ˜ μ›μ†Œλ“€μ„ νˆ¬ν¬μΈν„°λ‘œ 각각 λΉ„κ΅ν•˜λŠ” 방법 μ‹œλ„ν•΄ 보자
            lt, rt = i + 1, len(nums) - 1
            # μ΄λ ‡κ²Œ ν•˜λ©΄ n^3으둜 ν’€ μˆ˜λ°–μ— 없을 κ±° 같은데 흠..
            while lt < rt:
                tmp_sum = num + nums[lt] + nums[rt]

                if tmp_sum < 0:
                    lt += 1
                elif tmp_sum > 0:
                    rt -= 1
                else:
                    set_answer.add((num, nums[lt], nums[rt]))

                    lt += 1
                    rt -= 1

        return list(set_answer)


print(Solution().threeSum([-1, 0, 1, 2, -1, -4]))

Leave a comment