문제
https://leetcode.com/problems/spiral-matrix/submissions/
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
'leetCode' 카테고리의 다른 글
[Medium] 1630. Arithmetic Subarrays (0) | 2022.07.05 |
---|---|
[Medium] 973. K Closest Points to Origin (0) | 2022.07.01 |
[Easy] 1886. Determine Whether Matrix Can Be Obtained By Rotation (0) | 2022.06.30 |
[Medium] Rotate Image (0) | 2022.06.30 |
[Easy] 58. Length of Last Word (0) | 2022.06.17 |
Comment