본문 바로가기
‼ ERROR RECORD

Leetcode 15. 3Sum (two-pointer)

by Queen2 2022. 9. 21.
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

 

 


제출코드)

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        answer = []
        nums.sort()
        
        if len(nums) <= 1 or not nums:
            return []
        
        for k, val in enumerate(nums[:-2]):
            i = k + 1
            j = len(nums)-1
            
            while i < j :
                i_num, j_num = nums[i], nums[j]
                total = i_num + j_num + val
                if total == 0:
                    if [i_num,j_num,val] not in answer:
                        answer.append([i_num,j_num,val])
                    i += 1
                    j -= 1
                    
                elif total > 0:
                    j -= 1
                    
                elif total < -val:
                    i += 1
                        
                
        return answer

이전에 Leetcode 1번 twoSum 문제를 통해 유사한 풀이를 해봤음에도 계속 에러가 나서 시간이 한참 걸렸다....

그래서 이 문제에서 간과했던 실수를 정리해보려 합니다

 

  • [ ] 가 나오는 예외케이스 처리 (nums가 비어있거나 길이가 1개 이하일 경우)
  • two pointer처리를 위해서는 sort 처리가 선행되어야 한다
  • 3개 변수가 주어졌기 때문에 시작점을 0, 끝점을 -1로 무조건 잡을게 아니라,
    -> for 문으로 하나의 변수가 이미 i으로 시작
    -> 다른 변수는 i+1처리로 서로 겹치지 않도록 처리
    -> 나머지 하나는 기존 two pointer 처리 처럼 끝점에서 시작
  • k가 len(nums)의 자리까지 가게 되면 계산 중복이 발생하기 때문에 [:-2]처리를 통해 중복 방지
  • total = i_num + j_num+val을 미리 계산하고 if -elif문에 사용
    → IF 문에 매번 계산을 실행하면 TIME ERROR 발생
  • if 문에 첫번째에 i += 1, j -=1을 넣지 않으면 i와 j가 계속 제자리 걸음을 하기 때문에 변수 값을 변경처리 해줘야 함

 

코드를 실수 없이 짜기 위해서는 정말 많은 연습이 필요한 것 같습니다... ㅜㅠ

 

 

728x90
반응형

댓글