def snail(i,j,dir,cnt): # i, j, 방향, 몇번 움직였는지 확인
    while cnt < n*n:
        if 0 <= i + x[dir % 4] < n and 0 <= j + y[dir % 4] < n:
        # board 범위 안 넘어가는 조건
        
            if board[i+x[dir%4]][j+y[dir%4]] == 0:
            # 다음 값에 방문한 적이 없다는 조건
            
                i = i+x[dir%4] # i 변경
                j = j+y[dir%4] # j 변경
                cnt += 1 # 움직인 횟수 변경
                board[i][j] = cnt # board값 변경
            else:
                dir += 1 # 방향 변경
        else:
            dir += 1 # 방향 변경


T = int(input())

x = [0,1,0,-1]
y = [1,0,-1,0]

for tc in range(1,1+T):
    n = int(input())

    if n != 1:
        board = [[0]*n for _ in range(n)]

        board[0][0] = 1 # 시작점

        snail(0,0,0,1) # i,j,방향,움직인 횟수(시작점 방문 가정)

        print('#{}'.format(tc))

        for q in range(n):
            for w in range(n):
                print(board[q][w], end = ' ')
            print()


    else:
        print('#{}'.format(tc))
        print(1)

 

ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.

 

오류나 적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.

 

혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다