Search

Product of Array Except Self

문제 설명 : 제공된 배열에서 각 요소를 제외한 나머지 요소의 총 곱을 담은 리스트로 반환
풀이 방법
나머지 요소의 누적 곱을 반환하기 때문에, 0에 대한 처리를 어떻게 할지가 중요했다.
우선 0이 존재할 때 경우
1개만 존재하는 경우 → 0이 아닌 요소는 연산 시 무조건 0
2개 부터 → 모든 요소는 0
0이 없는 경우
총 곱을 미리 구한 후, 현 요소를 나눠서 반환
위 방법으로 처리하면, 제공된 nums 만으로 처리가 가능하기 때문에 공간 복잡도도 O(1)O(1)로 처리 가능하다.
시간복잡도 : O(N)O(N)
성공 코드
class Solution: def canPlaceFlowers(self, flowerbed: List[int], n: int) -> bool: # 화단이 없는 경우 if len(flowerbed) == 0: return False # 꽃을 심을 수 있는지 여부 def is_able_plant(cursor): # 현 위치에 안심어져 있는 경우 if flowerbed[cursor] == 0: # 화단의 첫 위치일 때, 화단이 길이가 1보다 길면 다음 위치에 안심어져 있는지 여부를 반환 if cursor == 0: return len(flowerbed) == 1 or (len(flowerbed) > 1 and flowerbed[cursor + 1] == 0) # 화단의 마지막 위치 & 이전 화단에 안심어져 있는경우 if cursor == len(flowerbed) - 1: return flowerbed[cursor - 1] == 0 # 현 위치의 양쪽 위치(이전/이후)에 안 심어져 있는지 여부를 반환 return flowerbed[cursor - 1] == 0 and flowerbed[cursor + 1] == 0 return False for cursor in range(len(flowerbed)): # 꽃을 심을 수 있는 위치로 이동 if cursor + 1 < len(flowerbed) and flowerbed[cursor] == 1: continue # 이후 위치들 확인 if n > 0 and is_able_plant(cursor): flowerbed[cursor] = 1 n -= 1 return n == 0
Python
복사