달팽이는 1부터 N * N까지의 숫자가 시계방향으로 이루어져 있다.
다음과 같이 정수 N을 입력 받아 N크기의 달팽이를 출력하시오.
N이 3일 경우,
1 | 2 | 3 |
---|---|---|
8 | 9 | 4 |
7 | 6 | 5 |
N이 4일 경우,
1 | 2 | 3 | 4 |
---|---|---|---|
12 | 13 | 14 | 5 |
11 | 16 | 15 | 6 |
10 | 9 | 8 | 7 |
달팽이의 크기 N은 1이상 10이하의 정수이다.
가장 첫 줄에는 테스트 케이스 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스에는 N이 주어진다.
각 줄은 '#t'로 시작하고, 다음 줄부터 빈 칸을 사이에 두고 달팽이 숫자를 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
T = int(input()) # 입력 받은 값을 정수형으로 변환시켜 T에 저장(테스트 케이스)
for i in range(1, T+1): # 1부터 T까지 1씩 증가하는 반복문
N = int(input()) # 입력 받은 값을 정수형으로 변환시켜 N에 저장(달팽이의 크기)
arr = [[0 for _ in range(N)] for _ in range(N)]
# 입력 받은 N 만큼 0을 가지는 리스트를 생성하고 또 N 만큼 앞의 0의 개수 만큼을 가지는 리스트를 생성
# 예를 들어 N이 2라면 0을 2회 반복 입력 하고, 이거를 또 2회 반복 입력해서 0 0 0 0 리스트를 만든다.
num = 1 # 리스트에 입력될 수
row = 0 # 리스트의 행 값
col = -1 # 리스트의 열 값
trans = 1 # 입력되는 숫자가 방향 전환을 할 때 사용될 변수
while N > 0: # 입력 받은 값 N이 0보다 크다면 무한 반복
for _ in range(N): # 0부터 N-1까지 1씩 증가하며 반복
col += trans # 열의 값에 방향 이동을 해주는 trans를 더함
arr[row][col] = num # 리스트에 행과 열의 값을 인덱스로 받아서 num을 넣어줌
num += 1 # num의 값을 1 증가
N -= 1 # 입력 받은 값 N을 1 감소
for _ in range(N): # 0부터 N-1까지 1씩 증가하며 반복
row += trans # 행의 값에 방향 이동을 해주는 trans를 더함
arr[row][col] = num # 리스트에 행과 열의 값을 인덱스로 받아서 num을 넣어줌
num += 1 # num의 값을 1 증가시킴
trans *= -1 # trans의 값을 음수(-1)로 변경
print('#{}'.format(i)) # format함수를 사용해서 테스트 케이스 번호를 출력
for j in range(len(arr)): # 0부터 리스트 arr의 길이 -1 까지 1씩 증가하며 반복
print(*arr[j]) # *를 이용해서 리스트 arr를 압축 해제해서 반복문을 통해 리스트에 있는 값을 순서대로 출력