본문 바로가기
알고리즘

[백준/파이썬] #16927

by 룰루루 2025. 5. 11.

이전에 풀었던 문제와 거의 똑같은 문제였다. 풀이 방법이 어렴풋이 기억나서, 다른 풀이를 참고하지 않고 풀 수 있었다. 

from collections import deque


def solution():
    global B

    def dimension_reduce(square_index):
        reduced_list = []
        for i in range(square_index, M-1-square_index):
            reduced_list.append(A[square_index][i])
        
        for i in range(square_index, N-1-square_index):
            reduced_list.append(A[i][M-1-square_index])
            
        for i in range(M-1-square_index, square_index, -1):
            reduced_list.append(A[N-1-square_index][i])

        for i in range(N-1-square_index, square_index, -1):
            reduced_list.append(A[i][square_index])

        return reduced_list


    def dimension_expand(square_index, items):

        for i in range(square_index, M-1-square_index):
            B[square_index][i] = items.popleft()

        for i in range(square_index, N-1-square_index):
            B[i][M-1-square_index] = items.popleft()

        for i in range(M-1-square_index, square_index, -1):
            B[N-1-square_index][i] = items.popleft()

        for i in range(N-1-square_index, square_index, -1):
            B[i][square_index] = items.popleft()

    
    number_of_squares = min(N, M) // 2
    for square_index in range(number_of_squares):
        reduced_list = deque(dimension_reduce(square_index))

        reduced_list.rotate(-R)

        dimension_expand(square_index, reduced_list)


if __name__ == "__main__":
    N, M, R = map(int, input().split())
    A = []
    B = [[0] * M for _ in range(N)]
    for _ in range(N):
        A.append(list(map(int, input().split())))
    
    solution()
    for i in range(N):
        print(" ".join(map(str, B[i])))

 

'알고리즘' 카테고리의 다른 글

[백준/파이썬] #2469  (0) 2025.05.18
[백준/파이썬] #21608  (0) 2025.05.15
[백준/파이썬] #2011  (0) 2025.05.08
[백준/파이썬] #1062  (0) 2025.05.05
[백준/파이썬] #14712  (0) 2025.05.03