https://www.acmicpc.net/problem/16935
"""
"""
from sys import stdin
input = stdin.readline
n, m, r = map(int, input().split())
pan = [ list(map(int, input().split())) for _ in range(n) ]
ope = list(map(int, input().split()))
def cal_1():
for i in range(n // 2):
pan[i], pan[n - i - 1] = pan[n - i - 1], pan[i]
def cal_2():
for i in range(m // 2):
for j in range(n):
pan[j][i], pan[j][m - i - 1] = pan[j][m - i - 1], pan[j][i]
def cal_3(n, m):
tmp = []
for i in range(m):
tmp2 = []
for j in range(n):
tmp2.append(pan[n - j - 1][i])
tmp.append(tmp2)
return tmp
def cal_4(n, m):
tmp = []
for i in range(m):
tmp2 = []
for j in range(n):
tmp2.append(pan[j][m - i - 1])
tmp.append(tmp2)
return tmp
while ope:
o = ope.pop(0)
if o == 1:
cal_1()
elif o == 2:
cal_2()
elif o == 3:
pan = cal_3(n, m)
n, m = m, n
elif o == 4:
pan = cal_4(n, m)
n, m = m, n
elif o == 5:
tmp = [ [0] * m for _ in range(n) ]
for i in range(n//2):
for j in range(m//2):
tmp[i][j+m//2] = pan[i][j]
for i in range(n//2):
for j in range(m//2, m):
tmp[i+n//2][j] = pan[i][j]
for i in range(n//2, n):
for j in range(m//2, m):
tmp[i][j-m//2] = pan[i][j]
for i in range(n//2, n):
for j in range(m//2):
tmp[i-n//2][j] = pan[i][j]
pan = tmp
elif o == 6:
tmp = [ [0] * m for _ in range(n) ]
for i in range(n//2):
for j in range(m//2):
tmp[i+n//2][j] = pan[i][j]
for i in range(n//2, n):
for j in range(m//2):
tmp[i][j+m//2] = pan[i][j]
for i in range(n//2, n):
for j in range(m//2, m):
tmp[i-n//2][j] = pan[i][j]
for i in range(n//2):
for j in range(m//2, m):
tmp[i][j-m//2] = pan[i][j]
pan = tmp
for i in pan:
print(*i)
문제에 주어진 대로 풀면 되는데 3, 4의 경우 조금 헷갈린다.
만약 n != m인 경우에는 90도 회전을 하게 되면 n, m이 서로 바뀌기 때문에
n, m = m, n 해주는 부분도 꼭 해줘야 한다.