이 문제에서는 문자 '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