1. 문제
2. 규칙찾기
3. 코드
1. 문제
아래와 같은 n*n 크기의 정사각형을 90도로 회전했을때의 결과를 출력해라.
단, 제공하는 matrix리스트 외의 다른 리스트를 만들어서 할당하지 말고 바로 matrix에서 정답을 도출시켜라.
아래 링크 클릭 후 로그인을 하시면 문제를 바로 확인해보실 수 있습니다.
https://leetcode.com/problems/rotate-image/
2. 규칙 찾기
3 * 3 정사각형 일 때 | |
90도 회전 전 위치 | 90도 회전 후 위치 |
(0,0) | (0,2) |
(0,1) | (1,2) |
(0,2) | (2,2) |
(1,0) | (0,1) |
(1,1) | (1,1) |
(1,2) | (2,1) |
(2,0) | (0,0) |
(2,1) | (1,0) |
(2,2) | (2,0) |
* 자세한 설명은 더보기에
위 표를 자세히 설명하자면,
matrix[0][0]배열에 있던 숫자는 90도 회전 후, matrix[0][2]위치에 가게 됩니다.
matrix[0][1]배열에 있던 숫자는 90도 회전 후, matrix[1][2]위치에 가게 됩니다.
matrix[0][2]배열에 있던 숫자는 90도 회전 후, matrix[2][2]위치에 가게 됩니다.
... ...
4 * 4 정사각형 일 때 | |
90도 회전 전 위치 | 90도 회전 후 위치 |
(0,0) | (0,3) |
(0,1) | (1,3) |
(0,2) | (2,3) |
(0,3) | (3,3) |
(1,0) | (0,2) |
(1,1) | (1,2) |
(1,2) | (2,2) |
(1,3) | (3,2) |
(2,0) | (0,1) |
(2,1) | (1,1) |
(2,2) | (2,1) |
(2,3) | (3,1) |
(3,0) | (0,0) |
(3,1) | (1,0) |
(3,2) | (2,0) |
(3,3) | (3,0) |
위 표를 자세히 설명하자면, 3*3과 마찬가지로
matrix[0][0]배열에 있던 숫자는 90도 회전 후, matrix[0][3]위치에 가게 됩니다.
matrix[0][1]배열에 있던 숫자는 90도 회전 후, matrix[1][3]위치에 가게 됩니다.
matrix[0][2]배열에 있던 숫자는 90도 회전 후, matrix[2][3]위치에 가게 됩니다.
matrix[0][3]배열에 있던 숫자는 90도 회전 후, matrix[3][3]위치에 가게 됩니다.
... ...
90도 회전 후 위치를 (x, y)라 할때,
x 는 0 부터 n-1 숫자를 n번씩 반복하고,
y는 n-1부터 n번씩 반복한다음, 1씩 감소하고 있습니다.
3. 코드
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
n=len(matrix)
dic={} #숫자 저장
d=n-1
for i in range(n):
for j in range(n):
dic[(j,d-i)]=matrix[j][d-i] #dic에 숫자를 저장 해줌.
if (i,j) in dic:
matrix[j][d-i]=dic[(i,j)]
else:
matrix[j][d-i]=matrix[i][j]
# 위에서 찾은 규칙과같이, 90도 회전 시킨 후의 위치안에 차례대로 숫자를 집어 넣음.
'코딩테스트 > 코딩테스트 문제' 카테고리의 다른 글
(백준) 1655 가운데를 말해요 문제 코드 분석 (상세하게) (2) | 2022.10.26 |
---|---|
코딩테스트: (LeetCode) 692. Top K Frequent Words 파이썬 코드/풀이 (0) | 2022.10.19 |
프로그래머스 - 순위 검색 Lv2 풀이/주석/자세한 설명 (0) | 2022.08.10 |
코딩테스트 문제: (LeetCode) Sqrt(x) - 자바스크립트 (0) | 2022.07.28 |
코딩테스트 문제: (LeetCode) Remove Element - 자바스크립트 (0) | 2022.07.27 |
댓글