ProductExceptSelf

Published at 2022-04-02

class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]:
        n = len(nums)
        answer = [1] * len(nums)
        front = 1
        back = 1
        for i in range(n):
            answer[i] *= front
            answer[n-1-i] *= back
            front *= nums[i]
            back *= nums[n-1-i]
        
        return answer
    
    # 자기 자신 빼고 모두 곱해야하니까
    # 나 기준으로 앞부분과 뒷부분 나눠서 곱해줄거임
    
    # [front]
    # i가 증가하면서 누적된 값을 가지고 있으면서 0 ~ i-1 을 i에 전부 곱해주면서 앞으로 나가면 됨
    # 예를들어 i=3이다. front변수에다가 0~2 인덱스의 곱을 누적해서 가지고 있다가 answer의 [3]에 곱해줌
    # [back]
    # 이번에는 걍 거꾸로 가주면됨
    # i는 증가하니까 len이용해서 i만큼의 뒷부분에 곱해줄거임. 여기까진 간단하지?
    # i=3이면 4~5 인덱스의 값들을 누적 곱해줘야 하는데
    # 앞에서 [0]이랑 [1]였을때 [5]랑 [4]의 값을 미리 back에 누적해뒀다가 answer의 [3]에 back을 곱해줌
    
    # 참고로 i가 오름차순으로 도는거니까 뒤쪽 인덱스들은 front가 곱해지기 전에 back이 먼저 곱해질거임
    # 뒷부분은 아무래도 back에 곱해지는 숫자들 개수가 적을테니까