[leetcode] Product of Array Except Self

hotbreakb·2022년 5월 6일
0

algorithm

목록 보기
19/25

Product of Array Except Self

문제 해설

Input: nums = [1,2,3,4]
Output: [24,12,8,6]

answer[i] = nums[i]에 있는 값을 제외한 nums에 있는 값을 곱한 값

  • 24 = 2*3*4
  • 12 = 1*3*4
  • 8 = 1*2*4
  • 4 = 1*2*3

접근법

예제 1처럼 nums에 있는 모든 값이 0이 아니라면 쉽게 풀 수 있다. nums에 있는 값을 전부 곱해서 nums[i]로 나눠주면 된다. 문제는 nums 안에 0이 있을 때이다. 이렇게 풀면 0/nums[i]를 계산하게 되어서 제대로 된 값을 계산할 수 없다.

하나의 예시를 들어보자. 문제에 나와있는 예제2이다.

Input: nums = [-1,1,0,-3,3]
Output: [0,0,9,0,0]

nums에 있는 값을 전부 곱하면 0이 된다. i=2일 때 0/0이 되어서 에러를 발생시킨다. 분모에는 0이 들어갈 수 없다. 따라서 이때를 예외로 만들어서 계산한다.

코드

class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]:
        answer = [0] * len(nums)
        allMultiply = reduce(operator.mul, tuple(nums))
        
        for i in range(len(nums)):
            if nums[i] != 0:
                answer[i] = allMultiply // nums[i]
            else:
                slicedTuple = tuple(nums[:i]+nums[i+1:])
                answer[i] = reduce(operator.mul, slicedTuple)
        return answer

sum()처럼 계산할 수 있는 mul()을 찾다가 reduce를 사용하는 방식을 배웠다. slicedTuplenums[i]를 뺀 tuple이다.

profile
글쟁이 프론트 개발자, 헬렌입니다.

0개의 댓글