반응형
알고리즘 문제를 풀면서 종종 2차원 배열을 회전하는 경우가 있습니다.
미리 정리해주면 좋을 것 같아서 회전 각도별로 코드 구현을 정리해봤습니다.
90도 회전
def rotate_90(m):
N = len(m)
ret = [[0] * N for _ in range(N)]
for r in range(N):
for c in range(N):
ret[c][N-1-r] = m[r][c]
return ret
180도 회전
def rotate_180(m):
N = len(m)
ret = [[0] * N for _ in range(N)]
for r in range(N):
for c in range(N):
ret[N-1-r][N-1-c] = m[r][c]
return ret
270도 회전
def rotate_270(m):
N = len(m)
ret = [[0] * N for _ in range(N)]
for r in range(N):
for c in range(N):
ret[N-1-c][r] = m[r][c]
return ret
총 정리
def rotate(m, d):
"""
2차원 배열을 90도 단위로 회전해 반환한다.
이때 원 배열은 유지되며, 새로운 배열이 탄생한다. 이는 회전이 360도 단위일 때도 해당한다.
2차원 배열은 행과 열의 수가 같은 정방형 배열이어야 한다.
:input:
m: 회전하고자 하는 2차원 배열. 입력이 정방형 행렬이라고 가정한다.
d: 90도씩의 회전 단위. -1: -90도, 1: 90도, 2: 180도, ...
"""
N = len(m)
ret = [[0] * N for _ in range(N)]
if d % 4 == 1:
for r in range(N):
for c in range(N):
ret[c][N-1-r] = m[r][c]
elif d % 4 == 2:
for r in range(N):
for c in range(N):
ret[N-1-c][N-1-r] = m[r][c]
elif d % 4 == 3:
for r in range(N):
for c in range(N):
ret[N-1-c][r] = m[r][c]
else:
for r in range(N):
for c in range(N):
ret[r][c] = m[r][c]
return ret
반응형
'DEVLOG > Algorithms' 카테고리의 다른 글
[BOJ 1260] DFS와 BFS 파이썬 풀이 (0) | 2019.09.21 |
---|---|
[LINE 코딩테스트] 상반기 기출문제 파헤쳐보기 (1) | 2019.09.20 |
[알고리즘/코딩테스트] 2019 NAVER 신입 공채 준비하기 (0) | 2019.09.18 |
[BOJ 2805] 나무 자르기 - 파이썬 풀이 (0) | 2019.09.11 |
[이분 탐색] 알고리즘 설명 및 예제 풀이 (0) | 2019.09.10 |
댓글