Minimum rooms for m events of n batches with given schedule

01 Jun, 2021
There are n student groups at the school. On each day in school, there are m time slots. A student group may or may not be free during a time slot. We are given n binary string where each binary string is of length m. A character at j-th position in i-th string is 0 if i-th group is free in j-th slot and 1 if i-th group is busy. Our task is to determine the minimum number of rooms needed to hold classes for all groups on a single study day. Note that one room can hold at most one group class in a single time slot.Examples:  
Input : n = 2, m = 7, slots[] = {“0101010”, “1010101”} Output : 1 Explanation : Both group can hold their classes in a single room as they have alternative classes.Input : n = 3, m = 7, slots[] = {“0101011”, “0011001”, “0110111”} Output : 3  
 
Approach used: Here we traverse through each character of strings we have and while traversing maintaining a count of the number of 1’s at each position of the strings and hence we know the number of coinciding classes at each particular time slot. Then we just need to find the maximum number of coinciding classes amongst all time slots. 
C++
Java
Python3
C#
PHP
Javascript
// CPP program to find minimum number of rooms// required#include <bits/stdc++.h>using namespace std; // Returns minimum number of rooms required// to perform classes of n groups in m slots// with given schedule.int findMinRooms(string slots[], int n, int m){    // Store count of classes happening in    // every slot.    int counts[m] = { 0 };    for (int i = 0; i < n; i++)            for (int j = 0; j < m; j++)                    if (slots[i][j] == '1')                counts[j]++;         // Number of rooms required is equal to    // maximum classes happening in a    // particular slot.    return *max_element(counts, counts+m);     } // Driver Codeint main(){    int n = 3, m = 7;    string slots[n] = { "0101011",                        "0011001",                        "0110111" };    cout << findMinRooms(slots, n, m);    return 0;}
// java program to find the minimum number// of rooms requiredclass GFG {     // Returns minimum number of rooms required    // to perform classes of n groups in m slots    // with given schedule.    static int findMinRooms(String slots[],                                   int n, int m)    {                 // Store number of class happening in        //empty slot        int counts[] = new int[m];                 //initialize all values to zero        for (int i = 0; i < m; i++)            counts[i] = 0;                 for (int i = 0; i < n; i++)                for (int j = 0; j < m; j++)                        if (slots[i].charAt(j) == '1')                    counts[j]++;                 // Number of rooms required is equal to        // maximum classes happening in a        // particular slot.                 int max = -1;        // find the max element        for (int i = 0; i < m; i++)            if(max < counts[i])                max = counts[i];                 return max;    }         // Driver Code    public static void main(String args[])    {        int n = 3, m = 7;        String slots[] = { "0101011",                           "0011001",                           "0110111" };        System.out.println( findMinRooms(slots, n, m));    }} // This code is contributed by Arnab Kundu.
# Python3 program to find minimum# number of rooms required # Returns minimum number of# rooms required to perform# classes of n groups in m# slots with given schedule.def findMinRooms(slots, n, m):     # Store count of classes    # happening in every slot.    counts = [0] * m;    for i in range(n):        for j in range(m):            if (slots[i][j] == '1'):                counts[j] += 1;         # Number of rooms required is    # equal to maximum classes    # happening in a particular slot.    return max(counts); # Driver Coden = 3;m = 7;slots = ["0101011", "0011001", "0110111"];print(findMinRooms(slots, n, m)); # This code is contributed by mits
// C# program to find the minimum number// of rooms requiredusing System;class GFG {      // Returns minimum number of rooms required    // to perform classes of n groups in m slots    // with given schedule.    static int findMinRooms(string []slots,                                   int n, int m)    {                  // Store number of class happening in        //empty slot        int []counts = new int[m];                  //initialize all values to zero        for (int i = 0; i < m; i++)            counts[i] = 0;                  for (int i = 0; i < n; i++)                for (int j = 0; j < m; j++)                        if (slots[i][j] == '1')                    counts[j]++;                  // Number of rooms required is equal to        // maximum classes happening in a        // particular slot.                  int max = -1;        // find the max element        for (int i = 0; i < m; i++)            if(max < counts[i])                max = counts[i];                  return max;    }          // Driver Code    public static void Main()    {        int n = 3, m = 7;        String []slots = { "0101011",                           "0011001",                           "0110111" };        Console.Write( findMinRooms(slots, n, m));    }}  // This code is contributed by nitin mittal
<?php// PHP program to find minimum// number of rooms required // Returns minimum number of// rooms required to perform// classes of n groups in m// slots with given schedule.function findMinRooms($slots, $n, $m){    // Store count of classes    // happening in every slot.    $counts = array_fill(0, $m, 0);    for ($i = 0; $i < $n; $i++)        for ($j = 0; $j < $m; $j++)                if ($slots[$i][$j] == '1')                $counts[$j]++;         // Number of rooms required is    // equal to maximum classes    // happening in a particular slot.    return max($counts);    } // Driver Code$n = 3;$m = 7;$slots = array("0101011", "0011001",                          "0110111");echo findMinRooms($slots, $n, $m); // This code is contributed by mits?>
<script> // Javascript program to find the minimum number// of rooms required       // Returns minimum number of rooms required    // to perform classes of n groups in m slots    // with given schedule.    function findMinRooms(slots, n, m)    {                    // Store number of class happening in        //empty slot        let counts = Array(m).fill(0);                    //initialize all values to zero        for (let i = 0; i < m; i++)            counts[i] = 0;                    for (let i = 0; i < n; i++)                for (let j = 0; j < m; j++)                        if (slots[i][j] == '1')                    counts[j]++;                    // Number of rooms required is equal to        // maximum classes happening in a        // particular slot.                    let max = -1;        // find the max element        for (let i = 0; i < m; i++)            if(max < counts[i])                max = counts[i];                    return max;    } // driver code      let n = 3, m = 7;        let slots = [ "0101011",                           "0011001",                           "0110111" ];        document.write( findMinRooms(slots, n, m));     </script>
3
 
Time Complexity: O(m * n) Auxiliary Space: O(m) 
andrew1234
nitin mittal
Mithun Kumar
avijitmondal1998
arorakashish0911
binary-string
Arrays
Greedy
Strings
Arrays
Strings
Greedy
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Arrays in Java
Write a program to reverse an array or string
Maximum and minimum of an array using minimum number of comparisons
Top 50 Array Coding Problems for Interviews
Largest Sum Contiguous Subarray
Program for array rotation
Write a program to print all permutations of a given string
Coin Change | DP-7
Program for Shortest Job First (or SJF) CPU Scheduling | Set 1 (Non- preemptive)
Minimum Number of Platforms Required for a Railway/Bus Station