정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.
def solution(n):
answer = []
array = [[0] * n for _ in range(n)]
val = n * (n + 1) // 2
dy = [1, 0, -1]
dx = [0, 1, -1]
y = 0; x = 0; direction = 0
for i in range(1, val+1):
array[y][x] = i
ny = y + dy[direction]
nx = x + dx[direction]
# 영역 범위 안이면서 아직 값을 채워넣지 않은 경우
if (0 <= ny < n and 0 <= nx < n and not array[ny][nx]):
y, x = ny, nx
# if문 조건 외 → 방향 전환(↓ → ↖)
else:
direction = (direction + 1) % 3
# 영역 가장자리 충돌 시 방향을 회전함과 동시에 위치를 한 칸 이동시켜줌
y += dy[direction]
x += dx[direction]
for i in array:
for j in i:
if j:
answer.append(j)
return answer