ReshapeTheMatrix

Published at 2021-11-15

class Solution:
    def matrixReshape(self, mat: List[List[int]], r: int, c: int) -> List[List[int]]:
        # 행,열 안맞으면 원래꺼 리턴
        if len(mat) * len(mat[0]) != r * c: return mat

        numList = [val for row in mat for val in row]  # 값만 뽑아
        newMat = [[0] * c for _ in range(r)]
        idx = 0
        for i in range(r):
            for j in range(c):
                newMat[i][j] = numList[idx]
                idx += 1
        return newMat
/**
 * @param {number[][]} mat
 * @param {number} r
 * @param {number} c
 * @return {number[][]}
 */
var matrixReshape = function(mat, r, c) {
    let rowLen = mat.length
    let colLen = mat[0].length
    
    if(r*c !== rowLen*colLen){
       return mat;
       }
    
    let row = 0;  // 새로 만들 array의 row
    let col = 0;
    const arr = Array.from(Array(r), () => Array(c));  // 2차원 배열 만들고
    
    
    // 새로만들 arr의 포인터를 각각 지정해서
    // col을 하나씩 증가시킨다. col이 목표colLen인 c에 도달하면 row를 하나 증가, col은 초기화
    for(let i=0; i<mat.length; i++){
        for(let j=0; j<mat[0].length; j++){
            arr[row][col] = mat[i][j];
            col ++;
            if(col>=c) {
                row ++;
                col = 0;
            }
        }
    }
    
    return arr
};