Problem From.
https://leetcode.com/problems/can-place-flowers/
오늘 문제는 꽃밭 배열 flowerbed 가 주어질때, 꽃을 이웃한 꽃과 겹치지 않게 n 개 심을 수 있으면 true 를 반환, 안되면 false 를 반환하느 문제였다.
꽃밭의 처음부터 검사하면서 앞뒤로 꽃이 심어져 있지 않으면 꽃을 심는다고 가정하고,
배열의 맨 처음과 끝은 더미데이터가 있다고 가정한 뒤 조건을 설정해주었다.
맨 앞에서는 해당 칸의 index 가 0 이면 index -1 의 가상의 칸에는 0 이 들어있다고 가정하고,
맨 뒤의 칸에서는 해당 칸의 index 가 flowerbed.size - 1 이면 flowerbed.size 의 가상의 칸에 0 이 들어있다고 가정하고 문제를 풀 수 있었다.
class Solution {
fun canPlaceFlowers(flowerbed: IntArray, n: Int): Boolean {
if(n == 0) return true
var cnt = n
for(i in 0 until flowerbed.size) {
if(flowerbed[i] == 0 && (i == 0 || flowerbed[i - 1] == 0) && (i == flowerbed.size - 1 || flowerbed[i+1] == 0)) {
flowerbed[i] = 1
cnt -= 1
}
if(cnt == 0) return true
}
return false
}
}
위 풀이의 시간복잡도는 O(N) 이 된다.