달팽이 배열은 N X N
배열에 1
부터 N²
까지의 자연수를 달팽이집 모양으로 채우는 것을 말한다.
아래 그림은 5 X 5
달팽이 배열이다.
위의 그림을 잘 보면, 각 라인 당 채우는 숫자의 개수가 5
, 4
, 4
, 3
, 3
, 2
, 2
, 1
, 1
이런식으로 변하는 것을 확인할 수 있다. 이러한 규칙을 잘 이용하면 다음과 같이 구현할 수 있다.
N = 5
arr = [[0] * N for _ in range(N)]
num = 0 # 배열에 넣을 숫자
y = 0 # 줄 위치
x = -1 # 칸 위치
size = N # 배열 크기
step = 1 # 증가/감소 크기: 1, -1
while size > 0:
for _ in range(size): # 가로로 이동
x += step
num += 1
arr[y][x] = num
size -= 1
for _ in range(size): # 세로로 이동
y += step
num += 1
arr[y][x] = num
step *= -1
for i in range(N):
for j in range(N):
print("%2d " % arr[i][j], end='')
print()
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
🔗 자세한 동작 원리는 여기 참고하기
https://codepractice.tistory.com/81
https://choykim.tistory.com/2
https://blog.daum.net/sualchi/13720896