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