Open In App

Find the arrangement of queue at given time

Improve
Improve
Like Article
Like
Save
Share
Report

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++




// 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




// 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




<?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)
?>


Javascript




<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)

 



Last Updated : 27 May, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads