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

C++에서 주어진 시간에 큐의 배열 찾기

<시간/>

이 문제에서는 문자 'M'과 'F'로만 구성된 문자열과 시간 t가 제공됩니다. 우리의 임무는 주어진 시간에 대기열의 배열을 찾는 것입니다. .

문자열은 버스에 입장하기 위해 공통 대기열에 서 있는 사람들을 정의합니다. 대기열에 있는 모든 수컷은 너무 기사도가 높아서 언제라도 뒤에 있는 암컷을 보면 자리를 바꿉니다. 버스에 탑승하는 데 t 단위 시간이 남았고 각 교환에는 1 단위 시간이 걸립니다. 대기열을 재정렬하여 버스가 올 때 위치를 찾아야 합니다.

문제를 이해하기 위해 예를 들어 보겠습니다.

Input : queue = "MFMMFF" , t = 3
Output : FFMFMM

설명 -

In T = 0 -> 1, 'M' at position 1 changes position with 'W' at 2 and 'M' at position 4 changes position with 'W' at 5. Queue becomes - "FMMFMF".
In T = 0 -> 1, 'M' at position 3 changes position with 'W' at 4 and 'M' at position 5 changes position with 'W' at 6. Queue becomes - "FMFMFM".
In T = 0 -> 1, 'M' at position 2 changes position with 'W' at 3 and 'M' at position 4 changes position with 'W' at 5. Queue becomes - "FFMFMM".

솔루션 접근 방식

문제를 해결하는 간단한 접근 방식은 큐를 나타내는 문자열을 T번 순회하는 것입니다. "MF" 쌍의 발생을 찾고 M과 F의 위치를 ​​교환합니다. 그리고 마침내 마지막 문자열을 반환합니다.

예시

솔루션 작동을 설명하는 프로그램

#include <iostream>
using namespace std;
string rearrageQueue(int n, int t, string queue) {
   for (int i = 0; i < t; i++)
      for (int j = 0; j < n - 1; j++)
         if (queue[j] == 'M' && queue[j + 1] == 'F') {
            queue[j] = 'F';
            queue[j + 1] = 'M';
            j++;
         }
   return queue;
}
int main() {
   int n = 6, t = 3;
   string queue = "MFMMFF";
   cout<<"The queue after time is over : "<<rearrageQueue(n, t, queue);
   return 0;
}

출력

The queue after time is over : FFMFMM