문제:
정사각형 행렬(행과 열의 수가 같은 배열의 배열)을 취하는 JavaScript 함수를 작성해야 합니다. 함수는 해당 배열 배열을 대각선으로 통과해야 하며 탐색하는 동안 발생한 순서대로 배치된 새 요소 배열을 준비해야 합니다.
예를 들어, 함수에 대한 입력이 -
인 경우const arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ];
그러면 출력은 다음과 같아야 합니다. -
const output = [1, 2, 4, 7, 5, 3, 6, 8, 9];
예시
이에 대한 코드는 -
const arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; const findDiagonalOrder = (arr = []) => { if(!arr.length){ return []; }; let ind = 0; let colBegin = 0, rowBegin = 0; let rowMax = arr.length, colMax = arr[0].length; const res = [], stack = []; while(rowBegin< rowMax || colBegin<colMax) { for(let row = rowBegin, col = colBegin; row < rowMax && col >=0 ; row++,col--){ if(ind%2 === 0){ stack.push((arr[row][col])); }else{ res.push(arr[row][col]); }; }; ind++; while(stack.length){ res.push(stack.pop()); }; colBegin++ if(colBegin> colMax-1 && rowBegin < rowMax){ colBegin = colMax-1 rowBegin++ } }; return res }; console.log(findDiagonalOrder(arr));
코드 설명:
우리가 취한 단계는 -
-
시작점을 추적하면서 한 방향으로 이동합니다.
-
인덱스가 짝수이면 스택으로 푸시하고 대각선 끝에 도달하면 팝하고 출력 배열에 팝을 추가합니다.
-
다음 대각선으로 이동할 때 인덱스를 계속 증가시킵니다.
-
다음 반복을 위해 마지막 인덱스에서 중지되고 이 지점에서 이동하는 행 시작 인덱스를 증가시키기 때문에 끝에 도달할 때까지 열 시작 인덱스를 증가시킵니다.
출력
콘솔의 출력은 -
[ 1, 2, 4, 7, 5, 3, 6, 8, 9 ]