- 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