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

n일 후 나무 높이를 찾는 C++ 코드

<시간/>

n개의 요소가 있는 배열 A가 있다고 가정합니다. A에는 0 또는 1의 요소가 있습니다. 트리가 있습니다. 연속 n일 동안 A[i]가 0이면 물을 주지 않고 1이면 물을 주면 꽃이 다음과 같이 자랍니다. -

  • 이틀 연속 물을 주지 않으면 죽는다

  • i번째 날 물을 주면 1cm 자랍니다.

  • i+1일째에 연속해서 물을 주면 1cm가 아닌 5cm로 자란다.

  • i일에 물을 주지 않으면 자라지 않습니다.

처음에는 나무의 길이가 1cm입니다. n일 후에 나무의 높이를 찾아야 합니다. 죽으면 -1을 반환합니다.

따라서 입력이 A =[0, 1, 1]과 같으면 출력은 7이 됩니다. 첫째 날에는 자라지 않기 때문에 높이는 1이고 둘째 날에는 높이가 2가 되기 때문입니다. 3일이 지나면 2 + 5 =7이 됩니다.

단계

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

r := 1
y := 0
n := size of A
for initialize i := 0, when i < n, update (increase i by 1), do:
   x := A[i]
   if r is same as -1, then:
      Ignore following part, skip to the next iteration
   if x is non-zero and y is non-zero, then:
      r := r + 5
   otherwise when x is non-zero, then:
      (increase r by 1)
   otherwise when not x is non-zero and not y is non-zero and i > 0, then:
      r := -1
   y := x
return r

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A){
   int r = 1;
   int y = 0;
   int n = A.size();
   for (int i = 0; i < n; ++i){
      int x = A[i];
      if (r == -1)
         continue;
      if (x && y)
         r += 5;
      else if (x)
         ++r;
      else if (!x && !y && i > 0)
         r = -1;
      y = x;
   }
   return r;
}
int main(){
   vector<int> A = { 0, 1, 1 };
   cout << solve(A) << endl;
}

입력

{ 0, 1, 1 }

출력

7