티스토리 뷰
문제 링크
문제
You are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise).
You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do the rotation.
Example 1:
Input: matrix = [[1,2,3],[4,5,6],[7,8,9]] Output: [[7,4,1],[8,5,2],[9,6,3]]
Example 2:
Input: matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]] Output: [[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]
Example 3:
Input: matrix = [[1]] Output: [[1]]
Example 4:
Input: matrix = [[1,2],[3,4]] Output: [[3,1],[4,2]]
Constraints:
- matrix.length == n
- matrix[i].length == n
- 1 <= n <= 20
- -1000 <= matrix[i][j] <= 1000
문제 풀이
이 문제는 2차원 배열이 주어지고 이를 시계방향으로 90도 만큼 돌렸을 때로 주어진 2차원 배열을 변경하는 문제입니다.
시계방향으로 90도 만큼 회전한다는 것은 위와 같이 행과 열을 바꿔주면 되는 문제였습니다.
저는 새로운 배열을 하나 만들어서 이를 처리해줬는데, 저 보다 더 나은 성능을 보이는 코드에서는 하나의 변수를 활용하여 배열을 더 만들지 않고 처리하는 방법을 사용했습니다.
실제로 그 방법이 메모리 절약차원에서 더 좋은 코드인거 같아요.
소스 코드
class Solution {
func rotate(_ matrix: inout [[Int]]) {
let n = matrix.count
for i in 0..<n {
var temp: [Int] = []
for j in stride(from: n - 1, to: -1, by: -1) {
temp.append(matrix[j][i])
}
matrix.append(temp)
}
for _ in 0..<(matrix.count / 2) {
matrix.removeFirst()
}
}
}
'Algorithm > LeetCode' 카테고리의 다른 글
[LeetCode] 75번 - Sort Colors [Swift] (0) | 2021.02.08 |
---|---|
[LeetCode] 70번 - Climbing Stairs [Swift] (1) | 2021.02.07 |
[LeetCode] 64번 - Minimum Path Sum [Swift] (0) | 2021.02.01 |
[LeetCode] 62번 - Unique Paths [Swift] (0) | 2021.02.01 |
[LeetCode] 56번 - Merge Intervals [Swift] (0) | 2021.02.01 |
- Total
- Today
- Yesterday
- dfs
- Xcode
- System
- Publisher
- IOS
- document
- Combine
- OSTEP
- 테이블뷰
- Swift
- 백준
- 코테
- 동시성
- 프로그래밍
- 코딩테스트
- 앱개발
- 알고리즘
- operator
- 자료구조
- 스위프트
- pattern
- OS
- design
- 아이폰
- operating
- BFS
- Apple
- DP
- 문법
- mac
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |