이 튜토리얼에서는 신호가 문자열의 모든 위치에 도달하는 데 걸리는 시간을 계산하는 프로그램을 작성할 것입니다. 예를 들어 설명하겠습니다.
만 포함하는 문자열이 생성됩니다. 및 p 문자. 신호입니다. 및 p 위치입니다. 문자열에서. 신호는 에서 시작합니다. 그리고 좌우 방향으로 움직입니다. 문자열의 다음 위치로 이동하는 데 1단위 시간이 걸린다고 가정합니다. 우리의 임무는 모든 위치를 변환하는 데 필요한 시간을 계산하는 것입니다. 신호로 .
몇 가지 예를 살펴보겠습니다.
입력 - ppppppsss
출력 - 5
입력 - pspspsps
출력 − 1
입력 - 큭큭큭
출력 - 0
문제 해결과 관련된 단계를 살펴보겠습니다.
-
문자열과 시간 초기화(0)
-
문자열을 반복합니다.
-
연속 p 세기 문자를 입력하고 카운트를 변수에 저장합니다.
-
현재 문자가 인 경우 및 p 개수가 이전 시간보다 큰 경우 여부를 확인하십시오. 가 왼쪽에 있는지 여부.
-
인 경우 양쪽에 모두 존재하는 경우 과 같이 카운트를 반으로 나눕니다. 양방향으로 이동할 수 있습니다.
-
p 카운트 재설정 .
-
예시
코드를 봅시다.
#include <bits/stdc++.h> using namespace std; int timeToConvertToSignalString(string sample_string, int string_len) { int p_count = 0, time = 0; for (int i = 0; i <= string_len; i++) { if (sample_string[i] == 'p') { p_count++; } else { if (p_count > time) { bool is_present_left_side = false; if (((i - p_count) > 0) && (sample_string[i - p_count - 1] == 's')) { is_present_left_side = 1; } if (is_present_left_side) { p_count = ceil((double)p_count / 2); } time = max(time, p_count); } p_count = 0; } } return time; } int main() { string sample_string = "pppppspss"; int n = sample_string.size(); cout << timeToConvertToSignalString(sample_string, n) << endl; return 0; }
출력
위의 프로그램을 실행하면 다음과 같은 결과를 얻을 수 있습니다.
5
다른 케이스로 프로그램을 실행하여 확인해보세요.
결론
튜토리얼에서 질문이 있는 경우 댓글 섹션에 언급하세요.