https://leetcode.com/problems/rotate-image/
문제 분석
주어진 이미지를 90도 시계방향으로 돌리는 경우 숫자가 어떻게 변해있는지를 구하는 문제입니다.
처음 시도한 답안
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
matrix_len = len(matrix)
matrix.reverse()
"""
matrix.reverse()
1 2 3 7 8 9
4 5 6 => 4 5 6
7 8 9 1 2 3
after two for loop.
i = 0
7 8 9 7 4 1
4 5 6 => 8 5 6
1 2 3 9 2 3
i = 1
7 4 1 7 4 1
8 5 6 => 8 5 2
9 2 3 9 6 3
i = 2
7 4 1 7 4 1
8 5 2 => 8 5 2
9 6 3 9 6 3
"""
for i in range(matrix_len):
for j in range(i, matrix_len):
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
접근 방법
- matrix에 담긴 행의 순서를 거꾸로 뒤집습니다.
- 이중 반복문을 통해서 (0, 0) & (0, 0), (0, 1) & (1, 0), (0, 2) & (2, 0) 의 쌍을 서로 스왑합니다.
(i,j 를 서로 스왑합니다, 즉 대각선을 중심으로 뒤집는 것과 같습니다)
처음에 접근한 방식은 행을 반복하면서 바꿔야할 x 좌표와 y 좌표를 구해서 변경하려고 했습니다. 하지만 이렇게 하다보니 추가적인 저장공간을 사용하지 않고서는 모든 요소에 맞는 숫자를 구할 수 없었습니다. 문제의 조건에 다른 2D maxtrix를 할당하지 말라는 것이 있으므로 솔루션을 참고해보았습니다.
솔루션의 접근법은 주석을 통해서 쉽게 이해할 수 있습니다. 주어진 이미지를 조금 더 깊게 살펴보았다면 위와 같은 아이디어를 생각해낼 수도 있지 않았을까 합니다.
728x90
'SW개발 > 코딩테스트' 카테고리의 다른 글
[LeetCode]Maximum Subarray (0) | 2023.05.21 |
---|---|
[LeetCode]Group Anagrams (0) | 2023.05.10 |
[LeetCode]Permutations (0) | 2023.05.08 |
[LeetCode]Jump Game II (0) | 2023.05.07 |
[LeetCode]Combination Sum (0) | 2023.05.06 |