•
문제 설명 : 제공된 배열에서 각 요소를 제외한 나머지 요소의 총 곱을 담은 리스트로 반환
•
풀이 방법
◦
나머지 요소의 누적 곱을 반환하기 때문에, 0에 대한 처리를 어떻게 할지가 중요했다.
▪
우선 0이 존재할 때 경우
•
1개만 존재하는 경우 → 0이 아닌 요소는 연산 시 무조건 0
•
2개 부터 → 모든 요소는 0
▪
0이 없는 경우
•
총 곱을 미리 구한 후, 현 요소를 나눠서 반환
◦
위 방법으로 처리하면, 제공된 nums 만으로 처리가 가능하기 때문에 공간 복잡도도 로 처리 가능하다.
•
시간복잡도 :
•
성공 코드
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
복사