[프로그래머스] 행렬 테두리 회전하기

joon_1592·2022년 1월 17일

알고리즘

목록 보기
17/51
def get_Matrix(rows, columns):
    M = [[0]*columns for _ in range(rows)]
    data = 1
    for i in range(rows):
        for j in range(columns):
            M[i][j] = data
            data += 1
    return M

def revolve_list(L):
    x = L.pop(-1)
    L.insert(0, x)
    return L

def get_list(query, M):
    x1, y1, x2, y2 = query
    L = []
    for j in range(y1-1, y2):
        L.append(M[x1-1][j])
    for i in range(x1, x2):
        L.append(M[i][y2-1])
    for j in range(y2-2, y1-1, -1):
        L.append(M[x2-1][j])
    for i in range(x2-1, x1-1, -1):
        L.append(M[i][y1-1])
    return L

def set_list(query, M, L):
    x1, y1, x2, y2 = query
    idx = 0
    for j in range(y1-1, y2):
        M[x1-1][j] = L[idx]
        idx += 1
    for i in range(x1, x2):
        M[i][y2-1] = L[idx]
        idx += 1
    for j in range(y2-2, y1-1, -1):
        M[x2-1][j] = L[idx]
        idx += 1
    for i in range(x2-1, x1-1, -1):
        M[i][y1-1] = L[idx]
        idx += 1

def show_matrix(M):
    rows = len(M)
    cols = len(M[0])
    for i in range(rows):
        for j in range(cols):
            print(M[i][j], end=' ')
        print()
    
def solution(rows, columns, queries):
    answer = []
    M = get_Matrix(rows, columns)
    for query in queries:
        L = get_list(query, M)
        #print(L)
        L = revolve_list(L)
        #print(L)
        set_list(query, M, L)
        #show_matrix(M)
        answer.append(min(L))
    return answer
profile
공부용 벨로그

0개의 댓글