Daily LeetCode Challenge - 605. Can Place Flowers

Min Young Kim·2023년 3월 20일
0

algorithm

목록 보기
98/198

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) 이 된다.

profile
길을 찾는 개발자

0개의 댓글