Post

[BOJ] 배열 돌리기 - 17276 (S1)

[BOJ] 배열 돌리기 - 17276 (S1)
시간 제한메모리 제한
2 초1024 MB

문제

n × n 크기의 2차원 배열 X가 있을 때, 45도 단위로 배열을 회전시키는 연산을 구현하는 문제이다.

풀이

구현 문제이다. 주 대각선, 가운데 열, 부 대각선, 가운데 행을 회전시킨다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from copy import deepcopy
class Matrix:
    def __init__(self):
        self.size, degree = map(int, input().split())
        self.rotate_n = (degree + 360) // 45
        self.matrix = [list(map(int, input().split())) for _ in range(self.size)]
        self.mid = self.size // 2

    def rotate_matrix(self):
        new_matrix = deepcopy(self.matrix)

        for _ in range(self.rotate_n):
            for i in range(self.size):
                new_matrix[i][self.mid] = self.matrix[i][i]
                new_matrix[self.size - i - 1][i] = self.matrix[self.size - i - 1][self.mid]
                new_matrix[self.mid][i] = self.matrix[self.size - i - 1][i]
                new_matrix[i][i] = self.matrix[self.mid][i]
            self.matrix = deepcopy(new_matrix)

        return new_matrix

    def print_matrix(self):
        for row in self.matrix:
            print(*row)
    

if __name__ == "__main__":
    TC = int(input())
    for _ in range(TC):
        matrix = Matrix()
        matrix.rotate_matrix()
        matrix.print_matrix()

시간 복잡도

O(N^2)

This post is licensed under CC BY 4.0 by the author.