< 문제 간단설명 >
위와 같은 규칙을 가지면서 이동할 때, 이동한 순서를 담긴 배열을 반환한다.
/**
* @param {number[][]} matrix
* @return {number[]}
*/
var spiralOrder = function(matrix) {
let result = [];
let [matrixRow, matrixCol] = [matrix.length, matrix[0].length];
let [startRow, startCol] = [0, 0];
let [endRow, endCol] = [matrix.length - 1, matrix[0].length - 1];
let totalElementCount = matrixRow * matrixCol;
while(true) {
// result에 모두 담겼을 경우 반복문 탈출
if(result.length === totalElementCount) {
break;
}
// 왼쪽에서 오른쪽으로
for(let col=startCol; col<=endCol; col+=1) {
result.push(matrix[startRow][col]);
}
startRow += 1;
// 위쪽에서 아래쪽으로
for(let row=startRow; row<=endRow; row+=1) {
result.push(matrix[row][endCol]);
}
endCol -= 1;
// 마지막에 왼쪽에서 오른쪽으로 가서 중앙에서 끝날 경우,
// 또는 열이 1개라 아래로 쭉 가서 끝날경우
if(startRow > endRow || startCol > endCol) {
break;
}
// 오른쪽에서 왼쪽으로
for(let col=endCol; col>=startCol; col-=1) {
result.push(matrix[endRow][col]);
}
endRow -= 1;
// 아래쪽에서 위쪽으로
for(let row=endRow; row>=startRow; row-=1) {
result.push(matrix[row][startCol]);
}
startCol += 1;
}
return result;
};
'PS > LeetCode' 카테고리의 다른 글
LeetCode / String / 43번 / Multiply Strings / JS (0) | 2023.04.19 |
---|---|
LeetCode / String / 14번 / Longest Common Prefix / JS (0) | 2023.04.19 |
LeetCode / Implementation / 202번 / Happy Number / JS (0) | 2023.04.18 |
LeetCode / Heap / 692번 / Top K Frequent Words / JS (0) | 2023.04.18 |