문제 : int 로 이루어진 list가 주어질 때 해당 인덱스의 원소를 제외한 나머지 원소의 곱을 인덱스와 원소로 가지는 list는 반환하라
Follow up :
아이디어 : K * O(n) 의 시간 복잡도를 가지기 위해, 0을 제외한 나머지 모든 원소의 곱을 곱해서 저장한다. 0은 갯수를 카운트 한다. 다음 번 순회에서 0일때는 다른 0이 있는 지 확인 후 있으면 0 반환, 없으면 m을 반환. 0이 아닐때는 0이 있다면 0 반환, 없으면 m // num을 반환한다.
코드 :
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
m = 1
zc = 0
ans = []
for num in nums:
if num == 0:
zc += 1
else:
m *= num
for num in nums:
if num == 0:
if 1 < zc:
ans.append(0)
else:
ans.append(m)
else:
if 0 < zc:
ans.append(0)
else:
ans.append(m//num)
return ans
학습 포인트 : 문제를 풀기 위한 최적화된 알고리즘을 생각하며 시간복잡도와 메모리복잡도를 함께 고려해서 생각하면 쉽게 문제를 풀 수 있다.
출처 : leetcode.com/problems/product-of-array-except-self/
'프로그래밍' 카테고리의 다른 글
leetcode 139. Word Break 풀이 (0) | 2021.04.27 |
---|---|
leetcode 62. Unique Paths 풀이 (0) | 2021.04.23 |
leecode 22. Generate Parentheses 풀이 (0) | 2021.04.23 |
leetcode 494. Target Sum 풀이 (0) | 2021.04.22 |
leetcode 739. Daily Temperatures 풀이 (0) | 2021.04.22 |