자신을 제외한 배열의 곱
파이썬 알고리즘
자신을 제외한 배열의 곱 - leetcode 238번
문제
238. Product of Array Except Self
입력: [1, 2, 3, 4]
출력: [24, 12, 8, 6]
해설
- 나눗셈을 사용하지 않고 O(n)에 풀이하는것이 포인트다
- 나눗셈 대신 곱셈만을 사용해야 한다.
- 이때 O(n)안에 풀이하기 위해서는 for문을 내부에 쓰는 대신 ->, <- 이렇게 외부에 2번 써야 한다.
- 자세히 보면 이전 인덱스의 값들을 누적해서 사용하는 과정이 들어간다.
- 누적은 result *= nums[i]를 사용하면 된다.
- 이때 이전의 인덱스를 가져와야 한다는 점이 조금 헷갈릴 수 있다.
- 배열에 먼저 append 후 result를 조작하는 방법이 있다.
- 아니면 값을 조작하고 if로 다음 인덱스 값에서 대입해주는 방법이 있다.
- 변수가 많아서 머리속으로만 생각하다가 너무 오래걸렸는데. 이렇게 복잡할때는 차라리 사고과정을 자세하게 적어가면서 접근하는게 훨씬 빠름
풀이
```python
class Solution: def solution(self, nums): result = 1 out = [] for i in range(len(nums)): if i > 0: result *= nums[i - 1] out.append(result)
result = 1
for j in range(len(nums) - 1, -1, -1):
if j < len(nums) - 1:
out[j] *= result
result *= nums[j]
return out s = [1, 2, 3, 4] result = Solution().solution(s) print(result)
```