https://school.programmers.co.kr/learn/courses/30/lessons/68645
아래, 오른쪽, 왼쪽 위의 순서로 반복된다.
이 방향 백터는 deque로 관리한다.각 순서는 n(아래), n-1(오른쪽), n-2(왼쪽 위), n-3(아래) ... 1(아래) 번 진행된다.
따라서 횟수만큼 진행되면 방향을 바꿔준다.
현재 방향은 vector[0]에 있다.
방향을 전환하려면 deque.rotate(-1) 로 구현하면 된다.
from collections import deque
from functools import reduce
def solution(n):
answer = []
board = [[0 for col in range(1, row + 1)] for row in range(1, n + 1)]
num = 1
y, x = -1, 0
vector = deque([(1, 0), (0, 1), (-1, -1)])
for count in range(n, 0, -1):
for _ in range(count):
dy, dx = vector[0]
y = y + dy
x = x + dx
board[y][x] = num
num += 1
vector.rotate(-1)
answer = reduce(lambda res, row: res + row, board, [])
return answer