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 |