n 비트와 다른 숫자 d가 있는 하나의 이진 문자열 S가 있다고 가정합니다. 숫자 라인에서 개구리는 점 1에서 시작하여 점 n에 도달하려고 합니다. 개구리는 d보다 크지 않은 거리에서 오른쪽으로 점프할 수 있습니다. 백합 꽃이 있으면 1에서 n까지의 각 점에 대해 1로 표시하고 그렇지 않으면 0으로 표시합니다. 개구리는 백합이 있는 지점에서만 점프할 수 있습니다. 개구리가 n에 도달하는 데 필요한 최소 점프 수를 찾아야 합니다. 가능하지 않으면 -1을 반환합니다.
따라서 입력이 S ="10010101"과 같으면; d =4이면 위치 1에서 4로 점프한 다음 인덱스 8(n)로 점프하기 때문에 출력은 2가 됩니다.
단계
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
n := size of s x := 0 y := 0 while (x < n - 1 and y <= n), do: if s[x] is same as '1', then: x := x + d increase y by 1 Otherwise (decrease x by 1) if y >= n, then: return -1 Otherwise return y
예
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#include <bits/stdc++.h> using namespace std; int solve(string s, int d){ int n = s.size(); int x = 0, y = 0; while (x < n - 1 && y <= n){ if (s[x] == '1') x += d, ++y; else --x; } if (y >= n) return -1; else return y; } int main(){ string S = "10010101"; int d = 4; cout << solve(S, d) << endl; }
입력
"10010101", 4
출력
2