문제풀다가 사실 깜짝 놀랐다. 2차원 배열 회전을 하는 방법이 아리까리(?) 했던 것이다... 그래서 이번 기회에 확실하게 복습해보려고 한다.
🕑 시계 방향 회전
그림을 살펴보면 행이 열이 되고, 열은 행이 되면서 뒤집히는 효과(?)를 볼수 있다. 이것을 (n-1-열)로 나타낼 수 있다. 이것을 코드로 구현해보면 아래와 같다.
func rotateClockwise(_ matrix: [[Int]]) -> [[Int]] {
let n = matrix.count
let m = matrix[0].count
var rotated = Array(repeating: Array(repeating: 0, count: n), count: m)
for i in 0..<n {
for j in 0..<m {
rotated[j][n-1-i] = matrix[i][j]
}
}
return rotated
}
🕗 시계 반대 방향 회전
반대로 회전하게 된다면 행이 열이되면서 (m-1-행)이 되는 것을 볼 수 있다. 열은 그대로 행이 된다.
func rotateCounterClockwise(_ matrix: [[Int]]) -> [[Int]] {
let n = matrix.count
let m = matrix[0].count
var rotated = Array(repeating: Array(repeating: 0, count: n), count: m)
for i in 0..<n {
for j in 0..<m {
rotated[m-1-j][i] = matrix[i][j]
}
}
return rotated
}
시간 복잡도는 O(n*m)이 된다.
'→ 알고리즘 관련' 카테고리의 다른 글
[Algorithm] 0-1 배낭문제(Knapsack Problem) - 백트래킹 (0) | 2025.02.07 |
---|---|
[Algorithm] 0-1 배낭문제(Knapsack Problem) - DP (0) | 2025.02.07 |
[Algorithm] 세그먼트 트리(Segment Tree) Swift로 구현하기 (0) | 2024.07.11 |
[Algorithm] Bitmask (비트마스크) (Swift) (0) | 2024.07.02 |
[Algorithm] 고차함수 정리(Swift) (0) | 2024.06.28 |