Programming/LeetCode

[Dart] 605. Can Place Flowers

Meezzi 2025. 4. 16. 10:57
728x90

1. 문제

https://leetcode.com/problems/can-place-flowers/description/?envType=study-plan-v2&envId=leetcode-75

 

 

2. 요구사항

1) 길게 이어진 화단(flowerbed)가 있다.

2) 이 화단의 꽃은 서로 인접한 땅에 심을 수 없다.

3) 0은 빈 자리, 1은 이미 꽃이 심어진 자리이다.

4) n은 새롭게 심고자 하는 꽃의 개수이다.

5) 인접한 칸에 꽃을 심을 수 없다는 규칙을 어기지 않고, n개의 꽃을 새로 심을 수 있다면 true를 반환하고, 그렇지 않으면 false를 반환한다.

 

 

3. 코드

class Solution {
  bool canPlaceFlowers(List<int> flowerbed, int n) {
  
    // flowerbed 배열을 순회
    for (int i = 0; i < flowerbed.length; i++) {
    
      // 현재 위치에 꽃이 심어져 있지 않고,
      // 왼쪽이 비어있거나 (i == 0 이면 화단의 시작이므로 자동으로 비어있는 것으로 간주)
      // 오른쪽도 비어있거나 (i == 마지막 인덱스이면 화단 끝이므로 자동으로 비어있는 것으로 간주)
      if (flowerbed[i] != 1 &&
          (i <= 0 || flowerbed[i - 1] == 0) &&
          (i >= flowerbed.length - 1 || flowerbed[i + 1] == 0)) {
          
        // 현재 위치에 꽃을 심는다
        flowerbed[i] = 1;
        
        // 심어야 할 꽃의 개수를 1 줄인다
        n--;
      }
    }
    
    // 모든 꽃을 다 심었거나 더 적게 심었다면 true 반환
    return n <= 0;
  }
}
728x90