[Leetcode 238] Product of Array Except Self

이재윤·2025년 1월 21일

https://leetcode.com/problems/product-of-array-except-self/description/

1) 코드

(1) 첫 코드

class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]:
        
        zeroCnt = 0

        for i in range(len(nums)):
            if nums[i] == 0:
                zeroCnt += 1 

        if zeroCnt >= 2:
            return [0]*len(nums)
        else: 
            total = 1 
            answer = []

            for i in range(len(nums)):
                if nums[i] != 0:
                    total *= nums[i] 
    
            if zeroCnt == 1:
                for i in range(len(nums)):
                    if nums[i] != 0:
                        answer.append(0)
                    else:
                        answer.append(total)
            else:    
                for i in range(len(nums)):
                    answer.append(total // nums[i])
    
            return answer 

(2) 두 번째 코드

class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]:
        
        output = [1]*len(nums)

        left = 1 

        for i in range(len(nums)):
            output[i] *= left
            left *= nums[i]

        right = 1 

        for i in range(len(nums)-1, -1, -1):
            output[i] *= right
            right *= nums[i]

        return output

2) 해설

  • 첫 풀이는, 0의 개수를 고려해서 코드를 짰다
    -> 이렇게 엣지 케이스를 고려해서 작성하는 코드는 좋지 않은 코드이다
  • 두 번째 풀이는, 좌측에서 한 번 순회, 우측에서 한 번 순회하는 식으로 해줬다
    -> 이렇게 하면, 별다른 엣지 케이스 고려 없이 모든 케이스를 고려할 수 있다
    -> 결국은 자기 자신만 빼고 다 곱해줘야 한다는 개념만 잘 고려하면 된다.

0개의 댓글