[Python] SW Expert Academy #1954 달팽이 숫자

이재원·2024년 3월 12일

Samsung SW Expert Academy

목록 보기
1/34

📚문제: #1954 달팽이 숫자(D2)

입력

2
3
4

출력

#1
1 2 3
8 9 4
7 6 5

#2
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7

전체 코드

# 1954. 달팽이 숫자

# 테스트 케이스의 개수 T
T = int(input())

# 움직이는 방향 순서
dr = [0, 1, 0, -1]
dc = [1, 0, -1, 0]

# 달팽이 만드는 함수
def snail(array):
    
    # 움직이는 방향 index
    k = 0
    
    # 시작 좌표
    cur_r = 0
    cur_c = 0
    
    # 초기화
    num = 0
    
    # 생성이 끝날 때 까지 반복
    while True:
        
        # 0일 때 생성
        if array[cur_r][cur_c] == 0:
            
            num += 1
            
            array[cur_r][cur_c] = num
            
            # 종료
            if num == N * N:
                
                break
            
            cur_r += dr[k]
            cur_c += dc[k]
            
            # 주어진 범위 안에 있을 때, 계속
            if 0 <= cur_r <= N-1 and 0 <= cur_c <= N-1:
                
                continue
            
            # 범위를 벗어나면 끝에 도달했으므로 방향 전환
            else:

                cur_r -= dr[k]
                cur_c -= dc[k]
                
                k += 1
                
                if k > 3:
                    
                    k = 0

                cur_r += dr[k]
                cur_c += dc[k]

        # 0이 아닐 때   
        else:

            cur_r -= dr[k]
            cur_c -= dc[k]
            
            # 방향을 바꾼다.
            k += 1
            
            if k > 3:
                
                k = 0
                
            cur_r += dr[k]
            cur_c += dc[k]
            
                
# 각 테스트케이스
for t in range(1, T+1):
    
    N = int(input())
    
    # N x N 2차원 리스트를 만든다.
    grid = [[0] * N for _ in range(N)]
    
    # 달팽이 생성
    snail(grid)
    
    print("#{}".format(t))
    
    for i in range(N):
        
        print(*grid[i])

0개의 댓글