# r, c일때
# 상 r-1, c
# 하 r+1, c
# 좌 r, c-1
# 우 r, c+1
# 표현
dr = [-1, 1, 0, 0]
dc = [0, 0, -1, 1]
# 대각선도 표현가능하다.(왼쪽 위, 왼쪽 아래, 오른쪽 위, 오른쪽 아래 등)
# 배열 범위 초과, 이미 입력된 칸 등
# 조건을 바탕으로 방향전환을 하는 문제가 나온다.
def solution(n):
total = n*(n+1)//2
dr = [1, 0, -1]
dc = [0, 1, -1]
ans = [[0]*(i+1) for i in range(n)]
r, c = 0, 0
dir = 0
for num in range(1, total+1):
ans[r][c] = num
nr, nc = r+dr[dir], c+dc[dir]
if nr < 0 or nc < 0 or nr >= n or nc >= n or ans[nr][nc] != 0:
dir = (dir+1) % 3
nr, nc = r+dr[dir], c+dc[dir]
r, c = nr, nc
return sum(ans, [])