Find the arrangement of queue at given time

Last Updated : 27 May, 2022

n people are standing in a queue to buy entry ticket for the carnival. People present there strongly believe in chivalry. Therefore, at time = t, if a man at position x, finds a woman standing behind him then he exchanges his position with her and therefore, at time = t+1, woman is standing at position x while man is standing behind her.
Given the total number of people standing in a queue as n, particular instant of time as t and the initial arrangement of the queue in the form of a string containing ‘M’ representing man at position i and ‘W’ representing woman is at position i, find out the arrangement of the queue at time = t.
Examples :

```Input : n = 6, t = 2
BBGBBG
Output: GBBGBB
Explanation:
At t = 1, 'B' at position 2 will swap
with 'G' at position 3 and 'B' at
position 5 will swap with 'G' at
position 6. String after t = 1 changes
to "BGBBGB". Now at t = 2, 'B' at
position = 1 will swap with 'G' at
position = 2 and 'B' at position = 4
will swap with 'G' at position 5.
String changes to "GBBGBB". Since,
we have to display arrangement at
t = 2, the current arrangement is

Input : n = 8, t = 3
BBGBGBGB
Output: GGBGBBBB```

Approach:
Traverse the entire string at every moment of time from 1 to t and if we find pairwise “BG” then swap them and move to check the next pair.
Below is the implementation of above approach:

C++

 `// CPP program to find the arrangement` `// of queue at time = t` `#include ` `using` `namespace` `std;`   `// prints the arrangement at time = t` `void` `solve(``int` `n, ``int` `t, string s)` `{` `    ``// Checking the entire queue for ` `    ``// every moment from time = 1 to` `    ``// time = t.` `    ``for` `(``int` `i = 0; i < t; i++) ` `        ``for` `(``int` `j = 0; j < n - 1; j++) ` `        `  `            ``/*If current index contains 'B' ` `              ``and next index contains 'G' ` `              ``then swap*/` `            ``if` `(s[j] == ``'B'` `&& s[j + 1] == ``'G'``) {` `                ``char` `temp = s[j];` `                ``s[j] = s[j + 1];` `                ``s[j + 1] = temp;` `                ``j++;` `            ``}` `            `  `    ``cout << s;` `}`   `// Driver function for the program` `int` `main()` `{` `    ``int` `n = 6, t = 2;` `    ``string s = ``"BBGBBG"``;` `    ``solve(n, t, s);` `    ``return` `0;` `}`

Java

 `// Java program to find the arrangement` `// of queue at time = t` `import` `java.io.*;`   `class` `Geek {` `    `  `    ``// prints the arrangement at time = t` `    ``static` `void` `solve(``int` `n, ``int` `t, ``char` `s[])` `    ``{` `        ``// Checking the entire queue for ` `        ``// every moment from time = 1 to ` `        ``// time = t.` `        ``for` `(``int` `i = ``0``; i < t; i++) ` `            ``for` `(``int` `j = ``0``; j < n - ``1``; j++) ` `            `  `                ``/*If current index contains 'B' ` `                  ``and next index contains 'G' ` `                  ``then swap.*/` `                ``if` `(s[j] == ``'B'` `&& s[j + ``1``] == ``'G'``) {` `                    ``char` `temp = s[j];` `                    ``s[j] = s[j + ``1``];` `                    ``s[j + ``1``] = temp;` `                    ``j++;` `                ``}` `                `  `        ``System.out.print(s);` `    ``}` `    `  `    ``// Driver function` `    ``public` `static` `void` `main(String args[])` `    ``{` `        ``int` `n = ``6``, t = ``2``;` `        ``String s = ``"BBGBBG"``;` `        ``char` `str[] = s.toCharArray();` `        ``solve(n, t, str);` `    ``}` `}`

Python3

 `# Python program to find ` `# the arrangement of ` `# queue at time = t`   `# prints the arrangement` `# at time = t` `def` `solve(n, t, p) :` `    `  `    ``s ``=` `list``(p)` `    `  `    ``# Checking the entire ` `    ``# queue for every` `    ``# moment from time = 1` `    ``# to time = t.` `    ``for` `i ``in` `range``(``0``, t) :` `    `  `        ``for` `j ``in` `range``(``0``, n ``-` `1``) :     ` `        `  `            ``# If current index ` `            ``# contains 'B' and` `            ``# next index contains ` `            ``# 'G' then swap` `            ``if` `(s[j] ``=``=` `'B'` `and` `                ``s[j ``+` `1``] ``=``=` `'G'``) :` `                `  `                ``temp ``=` `s[j];` `                ``s[j] ``=` `s[j ``+` `1``];` `                ``s[j ``+` `1``] ``=` `temp;` `                ``j ``=` `j ``+` `1`    `                `  `    ``print` `(''.join(s))`   `# Driver code` `n ``=` `6` `t ``=` `2` `p ``=` `"BBGBBG"` `solve(n, t, p)`   `# This code is contributed by ` `# Manish Shaw(manishshaw1)`

C#

 `// C# program to find the arrangement` `// of queue at time = t` `using` `System;`   `class` `Geek {` `    `  `    ``// prints the arrangement at time = t` `    ``static` `void` `solve(``int` `n, ``int` `t, ``char``[] s)` `    ``{` `        ``// Checking the entire queue for ` `        ``// every moment from time = 1 to ` `        ``// time = t.` `        ``for` `(``int` `i = 0; i < t; i++) ` `            ``for` `(``int` `j = 0; j < n - 1; j++) ` `            `  `                ``/*If current index contains 'B' ` `                ``and next index contains 'G' ` `                ``then swap.*/` `                ``if` `(s[j] == ``'B'` `&& s[j + 1] == ``'G'``) ` `                ``{` `                    ``char` `temp = s[j];` `                    ``s[j] = s[j + 1];` `                    ``s[j + 1] = temp;` `                    ``j++;` `                ``}` `                `  `        ``Console.Write(s);` `    ``}` `    `  `    ``// Driver function` `    ``public` `static` `void` `Main(String[] args)` `    ``{` `        ``int` `n = 6, t = 2;` `        ``String s = ``"BBGBBG"``;` `        ``char` `[]str = s.ToCharArray();` `        ``solve(n, t, str);` `    ``}` `}`   `// This code is contributed by parashar...`

PHP

 ``

Javascript

 ``

Output:

`GBBGBB`

Time Complexity: O(n*t)
Auxiliary Space: O(1)