행렬의 전치(Transpose)란?
행렬(2차원 배열)의 전치(transpose)란 원본 배열의 행과 열을 서로 뒤바꾼 형태를 말합니다. 즉, 원래 행에 있던 요소들이 열로 이동하고, 열에 있던 요소들이 행으로 이동하게 됩니다.
예를 들어 다음과 같은 2차원 배열이 있다고 가정해 보겠습니다.
const arr = [
[1, 1, 1],
[2, 2, 2],
[3, 3, 3],
];이 배열을 전치하면 각 행과 열이 뒤바뀌어 새로운 구조가 됩니다. 그렇다면 이를 코드로 어떻게 구현할 수 있을까요?
구현 예제
아래는 제자리(in-place) 방식으로 배열을 전치하는 JavaScript 코드입니다.
const arr = [
[1, 1, 1],
[2, 2, 2],
[3, 3, 3],
];
const transpose = arr => {
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < i; j++) {
const tmp = arr[i][j];
arr[i][j] = arr[j][i];
arr[j][i] = tmp;
}
}
}
transpose(arr);
console.log(arr);코드 동작 원리
이 알고리즘은 대각선을 기준으로 대칭되는 두 요소의 값을 서로 교환(swap)하는 방식으로 동작합니다. 내부 반복문의 조건이 j < i인 이유는, 이미 교환된 쌍을 다시 한 번 뒤바꾸면 원래 상태로 되돌아가기 때문입니다. 즉, 각 쌍을 정확히 한 번만 교환하여 불필요한 연산을 방지합니다.
또한 임시 변수 tmp를 사용해 값을 안전하게 보관한 뒤 교환하므로, 별도의 새 배열을 만들지 않고 기존 배열 자체를 수정하는 메모리 효율적인 방식입니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
[ [ 1, 2, 3 ], [ 1, 2, 3 ], [ 1, 2, 3 ] ]
원본 배열에서 각 행이 동일한 값으로 이루어져 있었기 때문에, 전치 후에는 각 열의 값들이 행으로 재배열된 것을 확인할 수 있습니다.