4주차 · 완전탐색과 시뮬레이션
보통배열구현

행렬 90도 회전

n × n 정수 행렬 matrix가 주어져요. 시계 방향으로 90도 돌린 행렬을 반환해요.

인덱스를 한 번에 옮기려 하면 헷갈려요. 전치한 뒤 각 행을 뒤집는다로 나누면 두 단계 모두 실수할 여지가 거의 없어요. 전치는 (i, j)(j, i) 를 맞바꾸는 것이고, 그 다음 각 행을 뒤집으면 시계 방향 회전이 돼요.

어려운 문제를 아는 조각으로 쪼개는 연습이에요. 반시계 방향이 필요하면 순서를 바꿔 각 행을 먼저 뒤집고 전치하면 돼요.

예시

예시 1
예시 2
예시 3

제한 사항

  • 1 ≤ n ≤ 200
  • -10^6 ≤ matrix[i][j] ≤ 10^6
  • 행과 열의 개수는 같아요.
새 행렬을 하나 만들어 out[j][n - 1 - i] = matrix[i][j] 로 옮겨도 돼요. 제자리에서 하려면 전치 후 각 행 뒤집기가 가장 헷갈리지 않아요. 전치할 때는 ji + 1부터 돌아야 두 번 바꿔 제자리로 돌아오지 않아요.
javascript
function rotateMatrix(matrix) {
const n = matrix.length;
const out = matrix.map((row) => row.slice());
for (let i = 0; i < n; i++) {
for (let j = i + 1; j < n; j++) {
const tmp = out[i][j];
out[i][j] = out[j][i];
out[j][i] = tmp;
}
}
for (const row of out) row.reverse();
return out;
}
에디터를 불러오고 있어요…
코드를 작성하고를 눌러 예시 테스트를 확인해 보세요.