🖥

[Python] 2차원 배열 안의 부분 배열 회전하기

망록 2023. 4. 30.

 

 

 

 

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

 

 

 

 

 

댓글