알고리즘 문제에 간간히 등장하는 행렬 회전 로직,
N * N 정사각형은 물론 N * M 직사각형 행렬에도 활용 가능한 코드를 미리 작성해보자.
📝 규칙 요점 정리
90도 회전함수
원본 행렬을 90도 회전시켜서 회전된 행렬을 반환한다.
fun rotate(originalArray: Array<IntArray>) : Array<IntArray> {
val originalRowSize = originalArray.size
val originalColSize = originalArray.first().size
// 행 <-> 열 크기 전환
val rotatedArray = Array(originalColSize){IntArray(originalRowSize)}
for (row in originalArray.indices) {
for (col in originalArray[row].indices) {
// 행 <-> 열 전환 및 rowSize - 1 - row
rotatedArray[col][row] = originalArray[originalRowSize- 1 - row][col]
}
}
return rotatedArray
}
180, 270, 360도 회전은 90도 회전 함수를 그대로 2,3,4회 반복 호출하면 된다.
전체 소스 (Kotlin)
class ArrayRotate {
var cnt = 0
private val arr = Array(3){IntArray(2){++cnt} }
private fun printArr(arr: Array<IntArray>) {
for (row in arr.indices) {
for (col in arr[row].indices) {
print(arr[row][col])
print(" ")
}
println()
}
}
private fun rotate(originalArray: Array<IntArray>) : Array<IntArray> {
val originalRowSize = originalArray.size
val originalColSize = originalArray.first().size
// 행 <-> 열 크기 대칭
val rotatedArray = Array(originalColSize){IntArray(originalRowSize)}
for (row in originalArray.indices) {
for (col in originalArray[row].indices) {
// 행 <-> 열 전환 및 및 rowSize - 1 - row
rotatedArray[col][row] = originalArray[originalRowSize- 1 - row][col]
}
}
return rotatedArray
}
@Test
internal fun testRotate() {
println("original array")
printArr(arr)
println("=======================")
val rotatedArray90 = rotate(arr)
println("90 degree rotated array")
printArr(rotatedArray90)
println("=======================")
val rotatedArray180 = rotate(rotatedArray90)
println("180 degree rotated array")
printArr(rotatedArray180)
println("=======================")
val rotatedArray270 = rotate(rotatedArray180)
println("270 degree rotated array")
printArr(rotatedArray270)
println("=======================")
val rotatedArray360 = rotate(rotatedArray270)
println("360 degree rotated array")
printArr(rotatedArray360)
println("=======================")
}
}
Print 결과
'Algorithm > Algorithm (이론)' 카테고리의 다른 글
[Algorithm] Parametric Search (0) | 2022.11.11 |
---|---|
[Algorithm] 비트연산자 (0) | 2022.10.19 |
[Algorithm] 순열 조합 (0) | 2022.09.19 |
[Algorithm] 재귀 (0) | 2022.09.07 |
[Algorithm] BFS (0) | 2022.09.02 |