Skip to content
Related Articles

Related Articles

Improve Article

Find the arrangement of queue at given time

  • Difficulty Level : Basic
  • Last Updated : 09 Nov, 2020
Geek Week

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


Output:
GBBGBB




My Personal Notes arrow_drop_up
Recommended Articles
Page :