Product of Array Except Self

박수빈·2022년 2월 22일
0

leetcode

목록 보기
28/51

문제

  • 정수 리스트 nums
  • answer[i]는 nums[i]를 제외한 모든 원소의 product
  • O(n)
  • division 사용 불가

풀이

  • O(n) 이면 반복문이 한번만 돌도록 해야함
  • 0인 경우 테스트 케이스를 좀 나눠서 해결
  • n**-1 이 n의 역수임을 이용 (곱셈으로 나눗셈 해결)
class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]:
        ans = []
        isZero = 0
        product = 1
        for n in nums:
            if n != 0:
                product *= n
            else:
                isZero += 1
        if isZero == 0:
            # 0이 한개도 없을 때
            for n in nums:
                ans.append(int(product*(n**(-1))))
        elif isZero == 1:
            # 0이 한개일 때
            for n in nums:
                if n == 0:
                    ans.append(product)
                else:
                    ans.append(0)
        else:
            # 0이 2개 이상
            for n in nums:
                ans.append(0)
                
        return ans
                

결과

list를 미리 0으로 초기화하기

class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]:
        lenNum = len(nums)
        ans = [0 for _ in range(lenNum)]
        isZero = 0
        product = 1
        for n in nums:
            if n != 0:
                product *= n
            else:
                isZero += 1
                
        if isZero == 0:
            # 0이 한개도 없을 때
            for ind, n in enumerate(nums):
                ans[ind]= int(product*(n**(-1)))
        elif isZero == 1:
            # 0이 한개일 때
            for ind, n in enumerate(nums):
                if n == 0:
                    ans[ind] = product
            
                
        return ans
               


미미하게 속도 향상,,

profile
개발자가 되고 싶은 학부생의 꼼지락 기록

0개의 댓글