본문 바로가기
개발/JavaScript

자바스크립트 - 전치 행렬 구하기 (Transpose 2D Array)

by 피로물든딸기 2024. 4. 10.
반응형

자바스크립트 전체 링크

 

다음과 같은 원본 배열이 있다고 가정하자.

const originalArray = [
  [1, 2, 3, 4, 5, 6],
  [7, 8, 9, 10, 11, 12],
  [13, 14, 15, 16, 17, 18],
];

 

이 배열을 전치(transpose)해서 아래의 배열을 얻어보자.

[
  [ 1, 7, 13 ],
  [ 2, 8, 14 ],
  [ 3, 9, 15 ],
  [ 4, 10, 16 ],
  [ 5, 11, 17 ],
  [ 6, 12, 18 ]
]

 

코드는 다음과 같다.

const transpose = (array) => {
  const rows = array.length;
  const cols = array[0].length;
  const transposedArray = [];
  
  for (let j = 0; j < cols; j++) {
    transposedArray[j] = [];
  }

  for (let r = 0; r < rows; r++) {
    for (let c = 0; c < cols; c++) {
      transposedArray[c][r] = array[r][c];
    }
  }

  return transposedArray;
}

const originalArray = [
  [1, 2, 3, 4, 5, 6],
  [7, 8, 9, 10, 11, 12],
  [13, 14, 15, 16, 17, 18],
];

let transposedArray = transpose(originalArray);

console.log(transposedArray);
console.log("============================");
console.log(transpose(transposedArray)); // = originalArray

 

출력 결과는 다음과 같다.

[
  [ 1, 7, 13 ],
  [ 2, 8, 14 ],
  [ 3, 9, 15 ],
  [ 4, 10, 16 ],
  [ 5, 11, 17 ],
  [ 6, 12, 18 ]
]
============================
[
  [ 1, 2, 3, 4, 5, 6 ],
  [ 7, 8, 9, 10, 11, 12 ],
  [ 13, 14, 15, 16, 17, 18 ]
]

 

위의 코드는 다음과 같이 한 줄로 처리할 수 있다.

const transpose = (array) => {
  return array[0].map((_, colIndex) => array.map((row) => row[colIndex]));
};
반응형

댓글