import java.io.*;
import java.util.*;
public class SW1961 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int t = 1; t <= T; t++) {
int N = Integer.parseInt(br.readLine());
int[][] graph = new int[N][N];
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
graph[i][j] = Integer.parseInt(st.nextToken());
}
}
System.out.println("#" + t);
int idx1 = 0; int idx2 = N-1;
while (true) {
String s1 = "";
for (int x = N-1; x >= 0; x--) {
s1 += graph[x][idx1];
}
s1 += " ";
for (int y = N-1; y >= 0; y--) {
s1 += graph[idx2][y];
}
s1 += " ";
for (int z = 0; z < N; z++) {
s1 += graph[z][idx2];
}
idx1++;
idx2--;
System.out.println(s1);
if (idx1 >= N) break;
}
}
}
}
규칙을 찾는데만 시간을 많이 보낸 문제이다.
노트에 몇행 몇열인지 하나씩 써 보면서 규칙을 알아냈을 때 부터 푸는데 까지는 오래걸리지 않았다. 문제를 더 많이 풀어봐야 속도가 빨라질 것 같다.
풀이
1. 먼저 graph[][] 배열을 생성하고 그 안에 입력값을 모두 넣는다.
2. 한 열씩 동일한 규칙이 있는데 0번째 열 부터 하나씩 채워나간다.
3. 하나의 문자열에 담고 종료조건으로 N범위를 벗어나면 종료.
※규칙: ↑ ← ↓ 각 열마다 이러한 방향으로 읽으면 된다.