자신을 제외한 배열의 곱
-
https://leetcode.com/problems/Product_of_Array_Except_Self/
-
page.193
설명이 부족해 이해가 잘 가지 않았다.
원리를 그림으로 표현하면 이렇다.
왼쪽으로 마지막원소를 제외한 원소들을 곱해주고 (1번과정, p1)
오른쪽으로 는 첫번째원소를 제외한 원소들을 곱해준다. (2번과정, p2)
p1과 p2를 곱해주면 결국 각 원소가 하나씩 빠진채로 곱해진 배열이 된다.(3번과정, p1*p2)
코드로는
for:
1번과정
for:
3번과정
2번과정
왜냐하면 3번과 2번은 방향이 같기 때문이다.
최종코드
from typing import List
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
p1 = 1
p1_list = []
for i in range(0, len(nums)):
p1_list.append(p1)
p1 *= nums[i]
p2 = 1
for i in range(len(nums)-1, 0 -1, -1):
print("i:", i)
p1_list[i] = p1_list[i] * p2
# 여기서 왼쪽의 p1_list가 최종결과list다.
# 즉 p1 * p2이다.
p2 *= nums[i]
return p1_list
a = Solution()
print(a.productExceptSelf([1,2,3,4]))
댓글 쓰기