2차원 배열 A 내부의 부분 배열을 회전시키기
a부터 b행, c부터 d행이 주어질 경우
시계방향
오른쪽으로 90도 회전
def rotate_subarray(A, a, b, c, d):
subarray = [row[c:d+1] for row in A[a:b+1]]
subarray = list(map(list, zip(*subarray)))[::-1]
for i in range(a, b+1):
for j in range(c, d+1):
A[i][j] = subarray[j-c][i-a]
return A
반시계방향
왼쪽 90도 회전
def rotate_subarray_left(A, a, b, c, d):
subarray = [row[c:d+1] for row in A[a:b+1]]
subarray = list(map(list, zip(*subarray[::-1])))
for i in range(a, b+1):
for j in range(c, d+1):
A[i][j] = subarray[i-a][j-c]
return A
zip을 사용하지 않고 좌표로 쌩으로 계산하는 경우
def rotate_subarray_right(A, a, b, c, d):
for i in range((b - a + 1) // 2):
for j in range(d - c):
A[a+i][c+j], A[b-i][c+j] = A[b-i][c+j], A[a+i][c+j]
return A
def rotate_subarray_left(A, a, b, c, d):
for i in range((d - c + 1) // 2):
for j in range(b - a + 1):
A[a+j][c+i], A[a+j][d-i] = A[a+j][d-i], A[a+j][c+i]
return A
'🖥' 카테고리의 다른 글
[C++]빠른 입출력 (0) | 2023.08.24 |
---|---|
[C++] Union-Find 기본 함수 (0) | 2023.08.23 |
[Algorithm] 비트마스크 (0) | 2023.04.17 |
[python3] itertools 없이 다음 순열 구하기 (C++ next_permutation 파이썬으로 구현) (1) | 2023.04.10 |
[Raspberry pi] 맥에서 라즈베리파이 접속하기 (ssh 및 원격접속) (2) | 2023.03.01 |
댓글