Friday, July 5, 2024
HomeData ModellingData Structure & AlgorithmEnlarge a Matrix such that each element occurs in R rows and...

Enlarge a Matrix such that each element occurs in R rows and C columns

Given a matrix arr[][] of size N x M, and two numbers R and C, the task is to enlarge this matrix such that each element of the original matrix occurs in R rows and C columns in the enlarged matrix.

Examples: 

Input: arr[][] = {{1, 2, 3}, {4, 5, 6}} R = 3, C = 2 
Output: 
1 1 2 2 3 3 4 4 5 5 6 6 
1 1 2 2 3 3 4 4 5 5 6 6 
1 1 2 2 3 3 4 4 5 5 6 6 
Explanation: 
Every element of the original matrix appears in 3 rows and 2 columns in the enlarged matrix.

Input: arr = {{1, 2}}, R = 2, C = 3 
Output: 
1 1 1 2 2 2 
1 1 1 2 2 2 
Explanation: 
Each element of the original matrix appears in 2 rows and 3 columns in the enlarged matrix. 

Approach: This problem can be solved by keeping either the number of rows or columns fixed. In this article, the number of rows is fixed. Therefore, for any matrix of dimension N x M, the number of rows in the final answer would be R. 
The idea is to first convert the given matrix into a one-dimensional array (i.e) flatten the given matrix. Now, for every element in the flattened matrix, append the values in R rows and C columns of the final enlarged matrix. 

Below is the implementation of the above approach:  

C++




// C++ program to enlarge a matrix
// such that each element occurs in
// R rows and C columns
#include <bits/stdc++.h>
using namespace std;
 
// Function to convert the matrix
// into a 1-D array
vector<int> oneD(vector<vector<int>> &matrix){
      
    // Variable to store the
    // given matrix
    vector<int> m;
  
    // Iterating through all the
    // elements of the matrix
    for(int i = 0; i < matrix.size(); ++i)
        for(int j = 0; j < matrix[0].size(); ++j)
            // Adding the element into the
            // defined matrix
            m.push_back(matrix[i][j]);
  
    return m;
}
  
// Function to enlarge a matrix
// such that each element occurs
// in R rows and C columns
vector<vector<int>> dimensions(int R, int C, vector<int> matrix) {
      
    // Initializing the enlarged
    // matrix
    vector<vector<int>> ans(R+1);
 
    // Variables to iterate over
    // the matrix
    int ctr = 0;
    int r = 0;
      
    while(ctr < matrix.size()) {
  
        // To keep the rows in the
        // range [0, R]
        r = r % R;
        int c = 0;
        while(c < C) {            
            // In order to fix the number
            // of columns, the above r
            // statement can be commented 
            // and this can be uncommented
            // c = c % C
               for(int i = 0; i < R; ++i)
                   ans[i].push_back(matrix[ctr]);
                
               c += 1;
          }
        ctr += 1;
        r += 1;
    }
 
    return ans;
}
     
// Driver code
int main() {
 
    vector<vector<int>> arr = {{1, 2}, {3, 4}};
    int R = 2, C = 3;
  
    vector<vector<int>> ans = dimensions(R, C, oneD(arr));
      
    // Print the enlarged matrix
    for(int i = 0; i < ans.size(); ++i) {
     
        for(int j = 0; j < ans[i].size(); ++j) {
            cout << ans[i][j] << " ";
        }
     
        cout<<endl;
    }
 
    return 0;
}
 
// This code is contributed by Sanjit_Prasad


Java




// Java program to enlarge a matrix
// such that each element occurs in
// R rows and C columns
import java.io.*;
import java.util.*;
 
class GFG{
 
// Function to convert the matrix
// into a 1-D array
static ArrayList<Integer>oneD(
    ArrayList<ArrayList<Integer>> matrix)
{
     
    // Variable to store the
    // given matrix
    ArrayList<Integer> m = new ArrayList<Integer>();
 
    // Iterating through all the
    // elements of the matrix
    for(int i = 0; i < matrix.size(); ++i)
        for(int j = 0; j < matrix.get(0).size(); ++j)
         
            // Adding the element into the
            // defined matrix
            m.add(matrix.get(i).get(j));
 
    return m;
}
 
// Function to enlarge a matrix
// such that each element occurs
// in R rows and C columns
static ArrayList<ArrayList<Integer>>dimensions(
    int R, int C, ArrayList<Integer> matrix)
{
     
    // Initializing the enlarged
    // matrix
    ArrayList<ArrayList<Integer>> ans = new ArrayList<>();
    for(int i = 0; i < R; ++i)
    {
        ans.add(new ArrayList<Integer>());
    }
 
    // Variables to iterate over
    // the matrix
    int ctr = 0;
    int r = 0;
 
    while (ctr < matrix.size())
    {
         
        // To keep the rows in the
        // range [0, R]
        r = r % R;
        int c = 0;
         
        while (c < C)
        {
             
            // In order to fix the number
            // of columns, the above r
            // statement can be commented
            // and this can be uncommented
            // c = c % C
            for(int i = 0; i < R; ++i)
            {
                ans.get(i).add(matrix.get(ctr));
            }
            c += 1;
        }
        ctr += 1;
        r += 1;
    }
    return ans;
}
 
// Driver code
public static void main(String[] args)
{
 
    ArrayList<ArrayList<Integer>> arr = new ArrayList<>();
    arr.add(new ArrayList<Integer>(Arrays.asList(1, 2)));
    arr.add(new ArrayList<Integer>(Arrays.asList(3, 4)));
    int R = 2, C = 3;
 
    ArrayList<ArrayList<Integer>> ans = new ArrayList<>(
        dimensions(R, C, oneD(arr)));
 
    // Print the enlarged matrix
    for(int i = 0; i < ans.size(); ++i)
    {
        System.out.print("[");
        for(int j = 0; j < ans.get(i).size(); ++j)
        {
            System.out.print(ans.get(i).get(j) + ", ");
        }
        System.out.print("]\n");
    }
}
}
 
// This code is contributed by akhilsaini


Python3




# Python program to enlarge a matrix
# such that each element occurs in
# R rows and C columns
 
# Function to convert the matrix
# into a 1-D array
def oneD(matrix):
     
    # Variable to store the
    # given matrix
    m = []
 
    # Iterating through all the
    # elements of the matrix
    for i in range(len(matrix)):
        for j in range(len(matrix[0])):
 
            # Adding the element into the
            # defined matrix
            m.append(matrix[i][j])
 
    return m[:]
 
# Function to enlarge a matrix
# such that each element occurs
# in R rows and C columns
def dimensions(R, C, matrix):
     
    # Initializing the enlarged
    # matrix
    ans = [[]] * R
     
    # Variables to iterate over
    # the matrix
    ctr = 0
    r = 0
 
     
    while(ctr < len(matrix)):
 
        # To keep the rows in the
        # range [0, R]
        r = r % R
        c = 0
        while(c < C):
             
            # In order to fix the number
            # of columns, the above r
            # statement can be commented 
            # and this can be uncommented
            # c = c % C
            ans[r].append(matrix[ctr])
             
            c+= 1
      
        ctr += 1
        r+= 1
         
         
    return ans
 
# Driver code
if __name__ == '__main__':
 
    arr = [[1, 2], [3, 4]]
    R, C = 2, 3
 
    ans = dimensions(R, C, oneD(arr))
     
    # Print the enlarged matrix
    for i in ans:
        print(i)


C#




// C# program to enlarge a matrix
// such that each element occurs in
// R rows and C columns
using System;
using System.Collections;
using System.Collections.Generic;
 
class GFG{
 
// Function to convert the matrix
// into a 1-D array
static List<int> oneD(List<List<int> > matrix)
{
     
    // Variable to store the
    // given matrix
    List<int> m = new List<int>();
 
    // Iterating through all the
    // elements of the matrix
    for(int i = 0; i < matrix.Count; ++i)
        for(int j = 0; j < matrix[0].Count; ++j)
         
            // Adding the element into the
            // defined matrix
            m.Add(matrix[i][j]);
 
    return m;
}
 
// Function to enlarge a matrix
// such that each element occurs
// in R rows and C columns
static List<List<int>> dimensions(int R, int C,
                                  List<int> matrix)
{
     
    // Initializing the enlarged
    // matrix
    List<List<int> > ans = new List<List<int> >();
    for(int i = 0; i < R; ++i)
    {
        ans.Add(new List<int>());
    }
 
    // Variables to iterate over
    // the matrix
    int ctr = 0;
    int r = 0;
 
    while (ctr < matrix.Count)
    {
         
        // To keep the rows in the
        // range [0, R]
        r = r % R;
        int c = 0;
         
        while (c < C)
        {
             
            // In order to fix the number
            // of columns, the above r
            // statement can be commented
            // and this can be uncommented
            // c = c % C
            for(int i = 0; i < R; ++i)
            {
                ans[i].Add(matrix[ctr]);
            }
            c += 1;
        }
        ctr += 1;
        r += 1;
    }
    return ans;
}
 
// Driver code
public static void Main()
{
 
    List<List<int>> arr = new List<List<int>>();
    arr.Add(new List<int>() { 1, 2 });
    arr.Add(new List<int>() { 3, 4 });
    int R = 2, C = 3;
 
    List<List<int>> ans = new List<List<int>>(
        dimensions(R, C, oneD(arr)));
 
    // Print the enlarged matrix
    for(int i = 0; i < ans.Count; ++i)
    {
        Console.Write("[");
        for(int j = 0; j < ans[i].Count; ++j)
        {
            Console.Write(ans[i][j] + ", ");
        }
        Console.Write("]\n");
    }
}
}
 
// This code is contributed by akhilsaini


Javascript




<script>
 
// JavaScript program to enlarge a matrix
// such that each element occurs in
// R rows and C columns
 
 
// Function to convert the matrix
// into a 1-D array
function oneD(matrix){
     
    // Variable to store the
    // given matrix
    let m = new Array();
 
    // Iterating through all the
    // elements of the matrix
    for(let i = 0; i < matrix.length; ++i)
        for(let j = 0; j < matrix[0].length; ++j)
            // Adding the element into the
            // defined matrix
            m.push(matrix[i][j]);
 
    return m;
}
 
// Function to enlarge a matrix
// such that each element occurs
// in R rows and C columns
function dimensions(R, C, matrix) {
     
    // Initializing the enlarged
    // matrix
    let ans = new Array();
 
    for(let i = 0;  i < R + 1; i++){
        ans.push([])
    }
 
    // Variables to iterate over
    // the matrix
    let ctr = 0;
    let r = 0;
     
    while(ctr < matrix.length) {
 
        // To keep the rows in the
        // range [0, R]
        r = r % R;
        let c = 0;
        while(c < C) {           
            // In order to fix the number
            // of columns, the above r
            // statement can be commented
            // and this can be uncommented
            // c = c % C
            for(let i = 0; i < R; ++i)
                ans[i].push(matrix[ctr]);
                 
            c += 1;
        }
        ctr += 1;
        r += 1;
    }
 
    return ans;
}
     
// Driver code
 
    let arr = [[1, 2], [3, 4]];
    let R = 2, C = 3;
 
    let ans = dimensions(R, C, oneD(arr));
     
    // Print the enlarged matrix
     for (let i of ans){
         if(i.length)
        document.write("[" + i + "]<br>")
     }
     
 
// This code is contributed by _saurabh_jaiswal
 
</script>


Output: 

[1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]
[1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]

 

Time Complexity: O(M * N * R * C), where  M and N are dimensions of the given matrix and R and C are the given integers.
Auxiliary Space: O(M * N * R * C)

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

Nicole Veronica Rubhabha
Nicole Veronica Rubhabha
A highly competent and organized individual DotNet developer with a track record of architecting and developing web client-server applications. Recognized as a personable, dedicated performer who demonstrates innovation, communication, and teamwork to ensure quality and timely project completion. Expertise in C#, ASP.Net, MVC, LINQ, EF 6, Web Services, SQL Server, MySql, Web development,
RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments