📖이 포스팅은 '파이썬 알고리즘 인터뷰 - 박상길님'을 보고 작성되었습니다.
😎문제 : https://leetcode.com/problems/product-of-array-except-self/
배열을 입력 받아 output[i]가 자신을 제외한 나머지 모든 요소의 곱셈 결과가 되도록 출력하라
[왼쪽 곱셈 결과에 오른쪽 값을 차례대로 곱셈]
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
answer =[]
p = 1
#왼쪽 곱셈 [1,1,2,6]
for i in range(len(nums)):
answer.append(p)
p = nums[i] * p
p = 1 #재사용을 위함
for i in range(len(nums) - 1, -1, -1):
answer[i] = answer[i] * p
p = p * nums[i]
return answer
- 이 문제의 주요 제약사항은 나눗셈을 하지 않고 O(n)에 풀이하라는 것이다.
- 이 말은 미리 전체 곱셈 값을 구해놓은 뒤 각 항목별로 자기 자신을 나눠서 풀이하는 방법은 안 된다는 뜻이기도 하다.
- 그렇다면 풀이 방법은 한 가지 뿐이다.
- 자기 자신을 제외하고 왼쪽의 곱셈 결과와 오른쪽의 곱셈 결과를 곱해야 한다.
- 위의 설명대로 왼쪽에 둔 값들을 모두 곱해놨던 리스트를 만들어 그 리스트를 맨 오른쪽부터 돌면서 곱해주는 걸로 한다 이때 P라는 변수를 이용해 왼쪽 오른쪽 값을 구해준다.
'자료구조와 알고리즘 > 🥑알고리즘' 카테고리의 다른 글
[알고리즘][연결 리스트] - 1. 팰린드롬 연결리스트 (0) | 2022.02.24 |
---|---|
[알고리즘][배열] - 7. 주식을 사고 팔기 가장 좋은 시점 (0) | 2022.02.21 |
[알고리즘][배열] - 5. 배열 파티션 1 (0) | 2022.02.21 |
[알고리즘][배열] - 4. 세 수의 합 (0) | 2022.02.21 |
[알고리즘][배열] - 2. 두 수의 합 (0) | 2022.02.20 |