[LeetCode] 605. Can Place Flowers

0

LeetCode

목록 보기
28/58
post-thumbnail

[LeetCode] 605. Can Place Flowers

풀이

  • edge case 처리에 유의!
class Solution {
public:
    bool canPlaceFlowers(vector<int>& flowerbed, int n) {
      if(n==0) return true;

      int planted = 0;
      int size = flowerbed.size();
      //size가 1인 경우
      if(size == 1){
        planted = (flowerbed[0] == 0);
        return (planted >= n);
      }

      //size가 1보다 큰 경우
      for(int i = 0; i< size; ++i){
        bool canPlant = false;

        //맨 왼쪽 자리에 꽃을 심을 수 있는지 검사
        if((i==0)&&(size >= 2)){
          if((flowerbed[0] == 0)&&(flowerbed[1]== 0)) canPlant = true;
        }
        //맨 오른쪽 자리에 꽃을 심을 수 있는지 검사
        else if((i == size-1)&&(size >= 2)){
           if((flowerbed[size-2] == 0)&&(flowerbed[size-1]== 0)) canPlant = true;
        }
        //중간 자리에 꽃을 심을 수 있는지 검사
        else if(size >= 3){
          if((flowerbed[i-1] == 0) && (flowerbed[i] == 0) && (flowerbed[i+1] == 0)) canPlant = true;
        }
        
        cout << i << " "<< canPlant<<"\n";

        if(canPlant){
          flowerbed[i] = 1;
          planted++;
          if(planted>= n) return true;
        }
      }
      return false;
    }
};
profile
Be able to be vulnerable, in search of truth

0개의 댓글