Algorithm (PS)

leetcode 15. 3Sum Python 풀이

minjiwoo 2022. 9. 19. 20:16
728x90

https://leetcode.com/problems/3sum/

 

3Sum - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

1. 시간초과난 브루트 포스 풀이 ㅋㅋ

  • -10^5 <= nums[i] <= 10^5
    그렇다 .. 주어지는 num 길이가 이미 10^5인데 (최대) N^3 짜리 브루트 포스로 하면 시간초과가 난다 
    하지만.. 이렇게 풀면 쉬운걸
class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        result = []
        n = len(nums)
        for i in range(0, n-2):
            for j in range(i+1, n-1):
                for k in range(j+1, n):
                    if nums[i] + nums[j] + nums[k] == 0:
                        temp = [nums[i], nums[j], nums[k]]
                        temp.sort()
                        if temp not in result:
                            result.append(temp)
        return result

배열을 정렬한 후 , 중복되어 검사하는 pair를 제거할 수 있도록 

if i > 0 and nums[i] == nums[i-1] 조건문을 각각의 for문에 넣어주었더니 통과했다 

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        result = []
        n = len(nums)
        nums.sort()
        for i in range(0, n-2):
            if i > 0 and nums[i] == nums[i-1]:
                continue 
            for j in range(i+1, n-1):
                if j > i+1 and nums[j] == nums[j-1]:
                    continue
                for k in range(j+1, n):
                    if k > j+1 and nums[k] == nums[k-1]:
                        continue
                    if nums[i] + nums[j] + nums[k] == 0:
                        result.append([nums[i], nums[j], nums[k]])
        return result

 

728x90