Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript의 행렬에서 대각선 순회

<시간/>

문제:

정사각형 행렬(행과 열의 수가 같은 배열의 배열)을 취하는 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
]