algorithm/leetcode

Reshape the Matrix [LeetCode]

hoonzii 2021. 7. 6. 14:32
반응형

우엥

문제 풀이 정리

 

In MATLAB, there is a handy function called reshape which can reshape an m x n matrix into a new one with a different size r x c keeping its original data.

You are given an m x n matrix mat and two integers r and c representing the row number and column number of the wanted reshaped matrix.

The reshaped matrix should be filled with all the elements of the original matrix in the same row-traversing order as they were.

If the reshape operation with given parameters is possible and legal, output the new reshaped matrix; Otherwise, output the original matrix.

 

Example 1:

Input: mat = [[1,2],[3,4]], r = 1, c = 4 Output: [[1,2,3,4]]

Example 2:

Input: mat = [[1,2],[3,4]], r = 2, c = 4 Output: [[1,2],[3,4]]

 

Constraints:

  • m == mat.length
  • n == mat[i].length
  • 1 <= m, n <= 100
  • -1000 <= mat[i][j] <= 1000
  • 1 <= r, c <= 300

코드

class Solution:
    def matrixReshape(self, mat: List[List[int]], r: int, c: int) -> List[List[int]]:
        
        number_list = []
        row = len(mat)
        col = len(mat[0])
        
        for i in range(row):
            for j in range(col):
                number_list.append(mat[i][j])
        
        if r * c != len(number_list):
            return mat
        else:
            result_list = []
            for row_i in range(r):
                temp_list = []
                for col_i in range(c):
                    temp_list.append(number_list.pop(0))
                result_list.append(temp_list)
            return result_list

 

문제 넋두리

블라인드 돌아다니다가 알고리즘 공부 질문에 리트코드 쓴다고 해서 나도 냉큼 가입해봤다.

매일 문제 하나씩 숙제 준다던데... 오늘 받은 문제는 저거 였다.

와... 영어라서 엄청 쉬운 문제인데 계속 틀렸다.

 

예를 들어 2*2 행렬로 만들수 있는 행렬은 1*4, 4*1, 2*2 인데 이게 안되면 그냥 자기 자신을 리턴하는 문제 였다.

근데 그걸 못봤다!!

문제를 잘 읽어야 된다는 교훈...

그래서 계속 엥? 안되는데 어케 만들지? 하면서 답에 내 결과를 꾸겨 넣으려고 했더니 당연히 안되지...

 

그래도 영어 문제라 신선했다.

 

반응형