문제
n * m크기의 직사각형에 숫자 1부터 순서대로 증가시키며 달팽이 모양으로 채우는 코드를 작성해보세요.
달팽이 모양이란 왼쪽 위 모서리에서 시작해서, 오른쪽, 아래쪽, 왼쪽, 위쪽 순서로 더 이상 채울 곳이 없을 때까지 회전하는 모양을 의미합니다.
n : 행(row), m : 열(column)을 의미합니다.
내 답(오답)
n, m = map(int, input().split())
output = [
[0] * n
for _ in range(m)
]
'''
1. 숫자 1부터 순서대로 증가시킴
2. nx, ny 의 range 확인
3. 그 자리에 != 0 이면 옆으로 돌아가야 돼
'''
# initial
x, y = 0, 0
output[x][y] = 1
dir_num = 0
dxs, dys = [0, 1, 0, -1], [1, 0, -1, 0]
def in_range(x, y):
return 0 <= x and x < n and 0 <= y and y < m
# 1은 이미 initial 로 채웠으니 2부터 채우기
for i in range(2, n * m + 1):
nx, ny = x + dxs[dir_num], y + dys[dir_num]
if not in_range(nx, ny) or output[nx][ny] != 0:
dir_num = (dir_num + 1) % 4
# 실제 채우는 쪽 함수
x, y = x + dxs[dir_num], y + dys[dir_num]
output[x][y] = i
for i in range(n):
for j in range(m):
print(output[i][j], end = ' ')
print()
진짜 어처구니 없는 실수를 저지름
제발,,,;;
초기 output 함수 지정,, n, m 꼴
-> 앞으로는 실수 없게 그냥 그려서 확인하자, 같은 느낌으로 xy 좌표계도 심심찮게 실수하는 듯
이건 경험치가 쌓이면 해결될 거라고 믿으며,,