Simple&Natural
배열 회전하기 본문
728x90
원리는 매우 간단한데 직접 그림을 그려보면 더욱 이해가 쉽다.
90도 회전은 위아래를 대칭시킨 뒤 주 대각선에 대해 대칭시킨 형태이다.
대각선에 대해 먼저 대칭을 시켜도 된다.
여기서 주 대각선이란 배열의 행과 열이 같은 라인을 의미한다.
아래의 그림은 2차원 배열을 보기 쉽게 도식화한 것이다.
색이 칠해진 부분을 1, 빈 칸을 0 으로 보면
[[0, 1, 0], [1, 1, 0], [0, 0, 1]] 형태의 2차원 배열이 된다.
이 배열을 위에서부터 쌓아내렸을 경우와 아래에서부터 쌓아 올렸을 경우 두 가지로 생각해보자.
(사실 별 차이는 없다)
reverse를 이용하면 배열의 행이 역순이 되므로 위아래가 바뀌고
i, j 대신 j, i를 대입해주면 배열의 행과 열이 바뀌게 되므로 대각선에 대한 대칭이 된다.
위에서 아래로 쌓는 배열의 경우 대각선은 y=-x 형태가,
아래에서 위로 쌓는 배열의 경우 y=x 형태의 대각선이 기준선이 될 것이다.
이유는 앞서 말했듯이 배열의 행과 열이 같아지는 원소들의 집합이 1번의 경우 y=-x, 2번의 경우 y=x 선 상에 있기 때문이다.
2차원 배열을 시계방향으로 90도 회전하는 소스코드
fun rotateArray(arr: Array<IntArray>): Array<IntArray> {
return Array(arr.size) { i ->
IntArray(arr.size) { j ->
arr.reversedArray()[j][i]
}
}
}
비슷한 방법으로 시계 반대방향으로도 줄 수 있다.
728x90