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 our answer. 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:
// CPP program to find the arrangement // of queue at time = t #include <bits/stdc++.h> 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 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);
}
} |
# 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# 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 // PHP program to find // the arrangement of // queue at time = t // prints the arrangement // at time = t function solve( $n , $t , $s )
{ // Checking the entire
// queue for every
// moment from time = 1
// to time = t.
for ( $i = 0; $i < $t ; $i ++)
{
for ( $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' )
{
$temp = $s [ $j ];
$s [ $j ] = $s [ $j + 1];
$s [ $j + 1] = $temp ;
$j ++;
}
}
}
echo ( $s );
} // Driver code $n = 6; $t = 2;
$s = "BBGBBG" ;
solve( $n , $t , $s );
// This code is contributed by // Manish Shaw(manishshaw1) ?> |
<script> // Javascript program to find the arrangement // of queue at time = t // prints the arrangement at time = t function solve( n, t, st)
{ // Checking the entire queue for
// every moment from time = 1 to
// time = t.
let s = st.split( '' );
for ( var i = 0; i < t; i++)
for ( var 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' ) {
var temp = s[j];
s[j] = s[j + 1];
s[j + 1] = temp;
j++;
}
document.write(s.join( '' ));
} // Driver function for the program var n = 6, t = 2;
var s = "BBGBBG" ;
solve(n, t, s); //This code is contributed by Shubham Singh </script> |
Output:
GBBGBB
Time Complexity: O(n*t)
Auxiliary Space: O(1)