회전 전의 열 번호와 회전 후의 행 번호가 일치한다. 그리고회전 후의 열은N-1에서회전 전의 행을 뺀 값과 같다.
MxM 격자
Before: i행,j열의 N값이면
After : (N-1,M-1-i) 라는것을 알수있다
코드로 구현하자
def rotate_90(board):
N=len(board)
new_board=[[0]*N for _ in range(N)]
for r in range(N): # 행
for c in range(N):
new_board[c][N-1-r]=board[r][c]
return new_board
board=[[1,2,3],
[4,5,6],
[7,8,9]]
print(rotate_90(board))
계속해서 180도 회전 코드
def rotate_180(board):
N = len(board)
new_board = [[0] * N for _ in range(N)]
for r in range(N):
for c in range(N):
new_board[N-1-r][N-1-c] = board[r][c]
return new_board
board=[[1,2,3],
[4,5,6],
[7,8,9]]
print(rotate_180(board))
계속해서 270도 회전 코드
def rotate_270(board):
N = len(board)
new_board = [[0] * N for _ in range(N)]
for r in range(N):
for c in range(N):
new_board[N-1-c][r] = board[r][c]
return new_board
board=[[1,2,3],
[4,5,6],
[7,8,9]]
print(rotate_270(board))
최종 코드
# d는 회전 단위 -> -1:-90도, 1:90도, 2:180도, 3:270도
def rotate(board, d):
N = len(board)
new_board = [[0] * N for _ in range(N)]
if d % 4 == 1: # 90도
for r in range(N):
for c in range(N):
new_board[c][N-1-r] = board[r][c]
elif d % 4 == 2: # 180도
for r in range(N):
for c in range(N):
new_board[N-1-r][N-1-c] = board[r][c]
elif d % 4 == 3: # 270도
for r in range(N):
for c in range(N):
new_board[N-1-c][r] = board[r][c]
else: # 360도
for r in range(N):
for c in range(N):
new_board[r][c] = board[r][c]
return new_board
board=[[1,2,3],
[4,5,6],
[7,8,9]]
d=3
rotated_board=rotate(board, d)
for b in rotated_board:
print(b)
90도 회전은 1, 5, … 처럼 4로 나눈 나머지가 1, 180도 회전은 2, 6, … 처럼 4로 나눈 나머지가 2, 270도 회전은 3, 7, … 처럼 4로 나눈 나머지가 3, 360도 회전은 4, 8, … 처럼 4로 나눈 나머지가 0,