https://leetcode.com/problems/rotate-image/
문제) n x n 배열의 시계방향 90도 회전
제한 조건) 입력 외의 2차원 배열은 사용하지 않는다
풀이)
(1) 행렬을 전치(행과 열 교환)시킨다 그리고 (2) 대칭되는 열들을 교환한다. 그러면 시계방향으로 90도 회전한 모습이 된다. 이렇게 풀 수 있는 이유는 입력 배열 안에서 회전시키려면 배열 내 원소들을 교환하는 방식으로 값을 바꿔야 하는데, 전치와 대칭열 교환 모두 그렇게 동작하기 때문이다.
코드
class Solution {
fun rotate(matrix: Array<IntArray>): Unit {
transpose(matrix)
reflect(matrix)
}
// 행렬 전치(행 <-> 열)
fun transpose(matrix: Array<IntArray>) {
for (row in 0 until matrix.lastIndex) {
for (col in row + 1 until matrix.size) {
val temp = matrix[row][col]
matrix[row][col] = matrix[col][row]
matrix[col][row] = temp
}
}
}
// 대칭 col 간 스위칭
fun reflect(matrix: Array<IntArray>) {
for (col in 0 until matrix.size / 2) {
for (row in matrix.indices) {
val temp = matrix[row][col]
matrix[row][col] = matrix[row][matrix.lastIndex - col]
matrix[row][matrix.lastIndex - col] = temp
}
}
}
}
'Problem Solving' 카테고리의 다른 글
[Leet Code] Odd Even Linked List (Kotlin) (0) | 2022.07.01 |
---|---|
[Leet Code] Product of Array Except Self (Kotlin) (0) | 2022.06.26 |
[Leet Code] Wiggle Subsequence (Kotlin) (0) | 2022.06.15 |
[Kotlin] Leet Code - 3Sum Closest (0) | 2022.05.12 |