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

신호가 문자열의 모든 위치에 도달하는 데 걸리는 시간 찾기 - C++

<시간/>

이 튜토리얼에서는 신호가 문자열의 모든 위치에 도달하는 데 걸리는 시간을 계산하는 프로그램을 작성할 것입니다. 예를 들어 설명하겠습니다.

만 포함하는 문자열이 생성됩니다. 및 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

다른 케이스로 프로그램을 실행하여 확인해보세요.

결론

튜토리얼에서 질문이 있는 경우 댓글 섹션에 언급하세요.