배열 돌리기

시간 제한3초메모리 제한512 MB

요약
홀수 크기 n x n 배열과 45도의 배수인 회전 각도가 주어질 때, 주대각선, 가운데 열, 반대각선, 가운데 행의 네 줄을 순환 이동시킨 결과를 출력한다.
난이도

보통10점 중 6점

유형
구현, 행렬, 시뮬레이션, 배열
정답자
아직 제출이 없습니다

문제

크기가 n x n인 2차원 정수 배열 X가 있다. n은 홀수이다.

X를 45°의 배수만큼 시계방향 또는 반시계방향으로 돌리려고 한다. X를 시계방향으로 45° 돌리면 다음 연산이 동시에 X에 적용된다.

  • X의 주 대각선 ((1,1), (2,2), …, (n, n))을 가운데 열 ((n+1)/2번째 열)로 옮긴다.
  • X의 가운데 열을 X의 부 대각선 ((n, 1), (n-1, 2), …, (1, n))으로 옮긴다.
  • X의 부 대각선을 X의 가운데 행 ((n+1)/2번째 행)으로 옮긴다.
  • X의 가운데 행을 X의 주 대각선으로 옮긴다.
  • 위 네 가지 경우 모두 원소의 기존 순서는 유지되어야 한다.
  • X의 다른 원소의 위치는 변하지 않는다.

반시계방향으로 45° 돌리는 경우도 위와 비슷하게 정의된다.

예를 들어 아래 그림 중앙에 5x5 배열 X가 있고, 이 배열을 시계방향 또는 반시계방향으로 45° 돌렸을 때의 결과가 각각 우측과 좌측에 있다. 굵은 원소는 주 대각선, 중간 열, 부 대각선, 중간 행에 위치한 원소이다.

3 2 5 4 15 6 8 9 14 10 1 7 13 19 25 16 12 17 18 20 11 22 21 24 231 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 2511 2 1 4 3 6 12 7 8 10 21 17 13 9 5 16 18 19 14 20 23 22 25 24 15
X를 반시계 방향으로 45° 회전한 경우배열 X (5x5)X를 시계 방향으로 45° 회전한 경우

입력으로 2차원 배열 X와 어느 방향으로 몇 도 회전할지 입력 받아, 그 결과를 출력하는 프로그램을 작성하시오.

입력

첫 줄에 테스트 케이스의 수 T가 주어진다 (1 ≤ T ≤ 10).

각 테스트 케이스에 대해: 첫 줄에 배열의 크기를 나타내는 n (1 ≤ n < 500, n은 홀수) 그리고 각도 d가 주어진다. d는 0 ≤ |d| ≤ 360 을 만족하며 |d| 는 45의 배수이다. d가 양수이면 시계방향으로 d° 돌려야 하고, 음수이면 반시계방향으로 |d|° 돌려야 한다. 다음 n줄에 걸쳐 각 줄에 n개의 정수가 공백으로 구분되어 주어진다 (X의 원소들을 나타낸다). 각 값은 1 이상 1,000,000 이하의 정수이다.

출력

각 테스트 케이스에 대해 회전 연산을 마친 후 배열의 상태를 출력한다. n줄에 걸쳐 각 줄에 n개의 정수를 공백으로 구분하여 출력한다.

예제1

  1. 예제 1

    입력
    4
    5 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
    5 -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
    5 135
    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
    5 360
    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
    
    예상 출력
    11 2 1 4 3 
    6 12 7 8 10 
    21 17 13 9 5 
    16 18 19 14 20 
    23 22 25 24 15 
    3 2 5 4 15 
    6 8 9 14 10 
    1 7 13 19 25 
    16 12 17 18 20 
    11 22 21 24 23 
    23 2 21 4 11 
    6 18 17 12 10 
    25 19 13 7 1 
    16 14 9 8 20 
    15 22 5 24 3 
    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