코딩테스트/SW Expert Academy / / 2024. 9. 19. 22:22

[D2] 1954. 달팽이 숫자

1954. 달팽이 숫자

 

✏️ 문제 풀이

- 첫 번째 인덱스 (dist[i][0]): x축 변화량 / 두 번째 인덱스 (dist[i][1]): y축 변화량

- dist[0]: (0, 1) -> 오른쪽 

- *row는 언팩킹(unpacking) 연산자로, 리스트의 각 요소를 개별 인자로 전달

T = int(input())

for test_case in range(T):
    n = int(input())
    # 이동 방향을 정의 (우, 하, 좌, 상)
    dist = [(0, 1), (1, 0), (0, -1), (-1, 0)]
    snail = [[0] * n for _ in range(n)]  # 0으로 채워진 n*n 빈 달팽이
    num = 1
    d = 0  # 이동 방향
    x, y = 0, 0  # 시작 위치 (0, 0)
    
    while num <= (n * n):
        snail[x][y] = num  # 현재 위치에 숫자 할당
        num += 1
        
        # 다음 위치 계산
        nx, ny = x + dist[d][0], y + dist[d][1] # x축과 y축에서의 이동량
        
        # 다음 위치가 범위를 벗어나거나 이미 채워져 있는지 확인
        if 0 <= nx < n and 0 <= ny < n and snail[nx][ny] == 0:
            x, y = nx, ny  # 유효한 다음 위치로 이동
        else:
            d = (d + 1) % 4  # 방향 전환
            x += dist[d][0]  # 새로운 방향으로 이동
            y += dist[d][1]

    print(f"#{test_case + 1}")
    for row in snail:
        print(*row)

'코딩테스트 > SW Expert Academy' 카테고리의 다른 글

[D2] 2005. 파스칼의 삼각형  (0) 2024.09.29
[D2] 2001. 파리 퇴치  (0) 2024.09.29
[D2] 1926. 간단한 369게임  (0) 2024.09.12
2029. 몫과 나머지 출력하기  (0) 2024.09.11
1933. 간단한 N 의 약수  (0) 2024.09.11
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유