문제설명 :
2차원 N x N 배열을 시계 방향으로 90도 회전시킨 배열을 리턴해야 합니다. 더 나아가서는 90도씩 K번 회전시킨 배열도 리턴해야합니다. 회전수는 함수의 두번째 입력으로 주어집니다.
입력
인자 1 : matrix
인자 2 : rotateNum
회전수로 생각하면 된다.
출력
처음 접근했던 코드
처음 내가 접근했던 코드, 기본 테스트는 통과했지만 고급 테스트로 갈수록 코드가 통과되지 않았다.
지금 봐도 지저분하지만 우선 공유해본다.
const rotateMatrix0 = function (matrix) {
if ( !matrix.length){
return [];
}
const result =[];
let m = matrix[0].length
let n = matrix.length
for (let row =0; row <m; row++){
result.push([])
}
if (m == n ){
for (let i=0; i < m; i++){
for(let j=n-1; j >= 0; j--){
result[i].push(matrix[j][i])
}
}
}
if ( m > n ){
for (let i=0; i < m; i++){
//console.log("i",i)
for(let j=n-1; j >= 0; j--){
console.log("i,j",i,j)
result[i].push(matrix[j][i])
}
}
}
return result
};
풀이코드 설명
회전수가 어떻게 오더라도 테스트를 전부 통과한 코 드다.
// 회전수가 없을 때 더 간략히 풀 수 있는 코드
// const rotateMatrix = function (matrix) {
// const N = matrix.length;
// const M = matrix[0] && matrix[0].length;
// let output = [];
// for (let row = 0; row < M; row++) {
// output[row] = [];
// for (let col = 0; col < N; col++) {
// output[row][col] = matrix[N - col - 1][row];
// }
// }
// return output;
// };
const rotateMatrix = function (matrix, rotateNum = 1) {
// rotateNum 이 0일 수 있으므로 아래와 같은 초기화는 지양해야 함
// rotateNum = rotateNum || 1
const N = matrix.length;
// 빈 배열을 입력받을 수 있다.
const M = matrix[0] && matrix[0].length;
rotateNum = rotateNum % 4;
// 회전하지 않는다.
if (rotateNum === 0) return matrix;
const rotated = [];
// 홀수번 회전 시 M x N, 짝수번 회전 시 N x M
const RC = rotateNum % 2 === 1 ? [M, N] : [N, M];
for (let row = 0; row < RC[0]; row++) {
rotated[row] = [];
for (let col = 0; col < RC[1]; col++) {
if (rotateNum === 1) rotated[row][col] = matrix[N - col - 1][row];
else if (rotateNum === 2)
rotated[row][col] = matrix[N - row - 1][M - col - 1];
else rotated[row][col] = matrix[col][M - row - 1];
}
}
return rotated;
};
입출력 예시
const matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16],
];
console.log(matrix[0][0]); // --> 1
console.log(matrix[3][2]); // --> 15
const rotatedMatrix = rotateMatrix(matrix);
console.log(rotatedMatrix[0][0]); // --> 13
const input = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
];
const input2 = []
rotateMatrix(input2)
rotateMatrix(input)
radixSort - 기수 정렬 (0) | 2023.02.06 |
---|---|
JavaScript Algoritim - spiralTraversal (0) | 2023.02.03 |
JavaScript - Algorithm 부등호숫자 문제 (0) | 2023.02.01 |
JavaScript Algorithm - LPS(Longest Prefix which is also Suffix) (0) | 2023.01.30 |
JavaScript - getItemFromTwoSortedArrays (0) | 2023.01.27 |