“파이썬 알고리즘 인터뷰” + https://leetcode.com/problems/product-of-array-except-self/

“배열을 입력받아 output[i]가 자신을 제외한 나머지 모든 요소의 곱셈 결과가 되도록 출력하라.”는 문제이다.

[1,2,3,4]가 입력인 경우, [24,12,8,6]이 정답이 된다. 여기서 골치 아픈 점은 You must write an algorithm that runs in O(n) time and without using the division operation.” -> “나눗셈 안 쓰고 O(n)에 풀이할 것”이다. O(n^2)에 풀자면 간단히 해결되고, 나눗셈을 쓸 수 있으면 배열의 전체 요소의 곱을 구해두고 nums[i]를 나누면 답이 나오기 때문이다.

오늘도 바로 풀이 방법이 떠오르지 않아서 풀이를 참고 했다.

class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]:
        p = 1
        out = []

        for i in range(len(nums)):
            out.append(p)
            p = p * nums[i]

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

        return out
  1. 인덱스를 기준으로 왼쪽 요소들을 모두 곱한 값을 output[i]에 저장한다.
  2. 인덱스를 기준으로 오른쪽 요소들을 모두 곱한 값을 output[i]와 곱해서 output[i]에 저장한다.

p라는 확장?을 생각할 수 있어야 한다.