좀 까다로운 구현 문제였다. 처음엔 2차원 배열을 단순하게 90도로 회전하는 건줄 알고 zip을 사용하면 될 줄 알았는데 바깥에서부터 안쪽으로 각 단계별로 각각 따로 회전하는 문제였다 ㅠㅠ
어떻게 해야 될 지 감이 오긴 하는데 정말 그렇게 풀어도 되나를 모르겠어서 검색해서 힌트를 좀 참고했다...
import sys
input = sys.stdin.readline
N, M, R = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(N)]
t = min(N, M) // 2
endY, endX = N, M
for i in range(t):
endX -= 1
endY -= 1
bord = (endX + endY - 2*i) * 2
r = R % bord
x = y = i
for _ in range((bord-1) * r):
if y == i and i <= x < endX:
arr[y][x], arr[y][x+1] = arr[y][x+1], arr[y][x]
x += 1
elif i <= y < endY and x == endX:
arr[y][x], arr[y+1][x] = arr[y+1][x], arr[y][x]
y += 1
elif y == endY and i < x <= endX:
arr[y][x], arr[y][x-1] = arr[y][x-1], arr[y][x]
x -= 1
elif x == i and i < y <= endY:
arr[y][x], arr[y-1][x] = arr[y-1][x], arr[y][x]
y -= 1
for row in arr:
print(*row)