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
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:
C++
#include <bits/stdc++.h>
using namespace std;
void solve( int n, int t, string s)
{
for ( int i = 0; i < t; i++)
for ( int j = 0; j < n - 1; j++)
if (s[j] == 'B' && s[j + 1] == 'G' ) {
char temp = s[j];
s[j] = s[j + 1];
s[j + 1] = temp;
j++;
}
cout << s;
}
int main()
{
int n = 6, t = 2;
string s = "BBGBBG" ;
solve(n, t, s);
return 0;
}
|
Java
import java.io.*;
class Geek {
static void solve( int n, int t, char s[])
{
for ( int i = 0 ; i < t; i++)
for ( int j = 0 ; j < n - 1 ; j++)
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);
}
public static void main(String args[])
{
int n = 6 , t = 2 ;
String s = "BBGBBG" ;
char str[] = s.toCharArray();
solve(n, t, str);
}
}
|
Python3
def solve(n, t, p) :
s = list (p)
for i in range ( 0 , t) :
for j in range ( 0 , n - 1 ) :
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))
n = 6
t = 2
p = "BBGBBG"
solve(n, t, p)
|
C#
using System;
class Geek {
static void solve( int n, int t, char [] s)
{
for ( int i = 0; i < t; i++)
for ( int j = 0; j < n - 1; j++)
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);
}
public static void Main(String[] args)
{
int n = 6, t = 2;
String s = "BBGBBG" ;
char []str = s.ToCharArray();
solve(n, t, str);
}
}
|
PHP
<?php
function solve( $n , $t , $s )
{
for ( $i = 0; $i < $t ; $i ++)
{
for ( $j = 0;
$j < $n - 1; $j ++)
{
if ( $s [ $j ] == 'B' &&
$s [ $j + 1] == 'G' )
{
$temp = $s [ $j ];
$s [ $j ] = $s [ $j + 1];
$s [ $j + 1] = $temp ;
$j ++;
}
}
}
echo ( $s );
}
$n = 6; $t = 2;
$s = "BBGBBG" ;
solve( $n , $t , $s );
?>
|
Javascript
<script>
function solve( n, t, st)
{
let s = st.split( '' );
for ( var i = 0; i < t; i++)
for ( var j = 0; j < n - 1; j++)
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( '' ));
}
var n = 6, t = 2;
var s = "BBGBBG" ;
solve(n, t, s);
</script>
|
Output:
GBBGBB
Time Complexity: O(n*t)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...