Find the arrangement of queue at given time
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)
Please Login to comment...