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