본문 바로가기

카테고리 없음

Python 2차원 배열 회전

728x90
반응형
SMALL
import copy
from collections import deque

array = [[1, 2, 3],[7, 2, 5]]


def tmpGraph(x,y,value):
    tmpMap = [[value for i in range(x)] for j in range(y)]
    return tmpMap

def mapPad(graph, east, west, south, north, value):
    graph = deque(map(deque , graph))
    tmpGraphXLen = len(graph[0])
    for _ in range(south):
      graph.append([value for _ in range(tmpGraphXLen + east + west)])  # 밑 padding
    for _ in range(north):
      graph.appendleft([value for _ in range(tmpGraphXLen + east + west)]) #윗 padding
    tmpGraphYLen = len(graph)
    for _ in range(north,tmpGraphYLen-south): #왼쪽 padding
        for j in range(east):
            graph[_] = deque(graph[_])
            graph[_].appendleft(value)
        graph[_] = list(graph[_])
    for _ in range(north, tmpGraphYLen - south):  # 오른쪽 padding
        for j2 in range(west):
            graph[_] = deque(graph[_])
            graph[_].append(value)
        graph[_] = list(graph[_])
    return list(graph)

def rotate(graph, count, direction):
    N = len(graph)
    M = len(graph[0])
    if not direction:
        count += 2
    if count%2 == 1:
        ret = [[0] * N for _ in range(M)]
    else:
        ret = [[0] * M for _ in range(N)]
    if count%4 == 1:
        for r in range(N):
            for c in range(M):
                ret[c][N - 1 - r] = graph[r][c]
        return ret
    elif count%4 == 2:
        for r in range(N):
            for c in range(M):
                ret[N - 1 - r][(M-1) - c] = graph[r][c]

        return ret
    elif count%4 == 3:
        for r in range(N):
            for c in range(M):
                ret[M- 1 -c][r] = graph[r][c]
        return ret
    else:
        return graph
    return graph
def graphInvert(graph,leftRight, upDown):
    N = len(graph)
    M = len(graph[0])
    ret = [[0] * M for _ in range(N)]
    if upDown: #상하반전
        for r in range(N):
            for c in range(M):
                ret[r][c] = graph[N-r-1][c]
    else:
        ret = graph
    graph = copy.deepcopy(ret)
    N = len(graph)
    M = len(graph[0])
    if leftRight: #좌우반전
        for r2 in range(N):
            for c2 in range(M):
                ret[r2][c2] = graph[r2][M-c2-1]
    return ret
728x90
반응형
LIST