[Medium] Spiral Matrix

문제

https://leetcode.com/problems/spiral-matrix/submissions/

 

Spiral Matrix - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

Given an m x n matrix, return all elements of the matrix in spiral order.

m x n 행렬이 주어지면 행렬의 모든 요소를 나선형 순서로 반환합니다.

 

예시

Example 1:

Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]
Output: [1,2,3,6,9,8,7,4,5]

Example 2:

Input: matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
Output: [1,2,3,4,8,12,11,10,9,5,6,7]

 

제약 조건

Constraints:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 10
  • -100 <= matrix[i][j] <= 100

 

해결 과정

값을 저장할 res 배열, left, right, top, bottom 변수를 생성한다.

left to right, top to bottom, right to left, bottom to top으로 for문을 돌면서 res에 값을 저장한다.

 

중간에 if문으로 break 코드를 추가한 이유 

: 하나의 row, 하나의 col로 구성된 matrix의 예외 처리를 위함

해결 코드

/**
 * @param {number[][]} matrix
 * @return {number[]}
 */
var spiralOrder = function(matrix) {
    let res = [],
        left = 0,
        right = matrix[0].length,
        top = 0,
        bottom = matrix.length;
    
    while(left < right && top < bottom){
        // get every i in the top row
        for(let i = left ; i < right ; i++){
            res.push(matrix[top][i]);
        }
        top++;
        
        // get every i in the right col
        for(let i = top ; i < bottom ; i++){
            res.push(matrix[i][right - 1]);
        }
        right--;
        
        if(!(left < right && top < bottom)){
            break;
        }
        
        // get every i in the bottom row
        for(let i = right - 1 ; i > left - 1; i--){
            res.push(matrix[bottom - 1][i])
        }
        bottom--;
        
        // get every i in the left col
        for(let i = bottom - 1 ; i > top - 1; i--){
            res.push(matrix[i][left])
        }
        left++;
    }
    return res;
};


참고 사이트

NeetCode

Spiral Matrix - Microsoft Interview Question - Leetcode 54

https://www.youtube.com/watch?v=BJnMZNwUk1M