
import os
import sys
import copy
current_file = os.path.basename(__file__)[:-3]
sys.stdin = open(f"input/{current_file}_input.txt", "r")
result = []
T = int(input())
def rotate(y, x, target, arr):
global N
if N - y - x == 1:
return target
for _ in range(N - y - x - 1):
# right
for i in range(x, N - x):
if i == x:
target[y][i] = arr[y + 1][i]
else:
target[y][i] = arr[y][i - 1]
# down
for i in range(y + 1, N - y):
target[i][N - x - 1] = arr[i - 1][N - x - 1]
# left
for i in range(N - x - 1, x, -1):
target[N - y - 1][i - 1] = arr[N - y - 1][i]
# up
for i in range(N - y - 1, y, -1):
target[i - 1][x] = arr[i][x]
arr = copy.deepcopy(target)
return target
for case in range(1, T + 1):
N = int(input())
arr = list(list(map(int, input().split())) for _ in range(N))
result.append(f"#{case}")
rotate_result = []
rotate_1 = []
rotate_2 = []
rotate_3 = []
for i in range(N // 2):
rotate_1 = rotate(i, i, arr, copy.deepcopy(arr))
rotate_2 = copy.deepcopy(rotate_1)
for i in range(N // 2):
rotate_2 = rotate(i, i, rotate_2, copy.deepcopy(rotate_1))
rotate_3 = copy.deepcopy(rotate_2)
for i in range(N // 2):
rotate_3 = rotate(i, i, rotate_3, copy.deepcopy(rotate_2))
for i, j, k in zip(rotate_1, rotate_2, rotate_3):
st = "".join(map(str, i))
st += " "
st += "".join(map(str, j))
st += " "
st += "".join(map(str, k))
result.append(st)
for _ in result:
print(_)
output = open(f"output/{current_file}_output.txt", "r").readlines()
output = [line.strip() for line in output]
print(result == output)
숫자 하나 하나 옮기자.
거대한 큐브를 분해해서, 테두리만 돌린다고 생각하자.
가장 바깥 테두리 부터 회전하고, 90도 회전이 됐으면, 그 안쪽의 테두리 를 회전 시키고,, 중앙에 도달할 때 까지 반복한다.
문제를 이해하고 해결 방법을 찾는데는 금방 걸렸지만, 이를 구현하는데 배열의 레퍼런스를 어떤 것을 사용해야 하는지에 대해 해결 하는 것에 시간이 오래 걸렸다.