Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 꽃을 놓을 수 있음

<시간/>

일부 구획이 심어져 있고 일부는 비어 있는 긴 화단이 있다고 가정합니다. 이제 제약이 있습니다. 꽃은 인접한 구획에 심을 수 없으며 물을 놓고 경쟁하고 둘 다 죽을 것입니다. 따라서 0과 1을 포함하는 배열로 표시되는 화단이 있고 0은 비어 있음을 나타내고 1은 채우기를 나타내고 숫자 n도 제공되면 n개의 새 꽃을 심을 수 있는지 확인해야 합니다. 인접 꽃 규칙 여부.

따라서 입력이 화단 =[1,0,0,0,1], n =1인 경우 출력은 True

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 화단의 크기가

    • 거짓 반환

  • 화단의 크기가 1과 같고 화단[0]이 0과 같고 n이 1과 같으면 -

    • true를 반환

  • for initialize i :=0, i <화단의 크기일 때 업데이트(i를 1만큼 증가), -

    • n> 0이면 -

      • i가 0과 같으면 -

        • 화단[i]이 0과 같고 화단[1]이 0과 같으면 -

          • 화단[0] :=1

          • (n을 1씩 감소)

      • 그렇지 않으면 i가 화단의 크기와 같을 때 - 1, 그러면 -

        • 화단[i]이 0과 같고 화단[i - 1]이 1과 같지 않으면 -

          • 화단[i] :=1

          • (n을 1씩 감소)

      • 그렇지 않으면 화단[i]이 0과 같고 화단[i + 1]이 0과 같고 화단[i - 1]이 0과 같을 때 -

        • 화단[i] :=1

        • (n을 1씩 감소)

    • n이 0과 같으면 -

      • true를 반환

  • n이 0과 같으면 -

    • true를 반환

  • 거짓 반환

예시

더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool canPlaceFlowers(vector<int>& flowerbed, int n) {
      if (flowerbed.size() < n)
         return false;
      if (flowerbed.size() == 1 && flowerbed[0] == 0 && n == 1)
         return true;
      for (int i = 0; i < flowerbed.size(); i++) {
         if (n > 0) {
            if (i == 0) {
               if (flowerbed[i] == 0 && flowerbed[1] == 0) {
                  flowerbed[0] = 1;
                  n--;
               }
            }
            else if (i == flowerbed.size() - 1) {
               if (flowerbed[i] == 0 && flowerbed[i - 1] != 1) {
                  flowerbed[i] = 1;
                  n--;
               }
            }
            else if (flowerbed[i] == 0 && flowerbed[i + 1] == 0 && flowerbed[i - 1] == 0) {
flowerbed[i] = 1;
               n--;
            }
         }
         if (n == 0) {
            return true;
         }
      }
      if (n == 0) {
         return true;
      }
      return false;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,0,0,0,1};
   cout << (ob.canPlaceFlowers(v, 1));
}

입력

{1,0,0,0,1}, 1

출력

1