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