[SWEA / PYTHON] 1961. 숫자 배열 회전

박제현·2023년 10월 28일

SSAFY

목록 보기
6/16

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도 회전이 됐으면, 그 안쪽의 테두리 를 회전 시키고,, 중앙에 도달할 때 까지 반복한다.
문제를 이해하고 해결 방법을 찾는데는 금방 걸렸지만, 이를 구현하는데 배열의 레퍼런스를 어떤 것을 사용해야 하는지에 대해 해결 하는 것에 시간이 오래 걸렸다.

profile
닷넷 새싹

0개의 댓글