밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.
깔끔하게 함수 나눠서 푸는 습관을 들이자 ~
def get_next(cur_y, cur_x, cur_d):
DELTAS = {'U': (-1, -1), 'D': (1, 0), 'R': (0, 1)}
dy, dx = DELTAS[cur_d][0], DELTAS[cur_d][1]
nxt_y, nxt_x = cur_y + dy, cur_x + dx
return nxt_y, nxt_x
def check_turn(nxt_y, nxt_x, n, snail):
#범위(0~N)을 벗어났거나 이미 숫자가 채워진 경우 방향 바꿈
return nxt_y < 0 or nxt_y >= n or nxt_x > nxt_y or snail[nxt_y][nxt_x] != 0
def solution(n):
answer = []
#다음방향
NEXT = {'U': 'D', 'D': 'R', 'R': 'U'}
N = sum(range(1, n+1))
snail = [[0] * i for i in range(1, n+1)]
#초기 좌표와 방향
cur_y, cur_x, cur_d = 0, 0, 'D'
for num in range(1, N+1):
snail[cur_y][cur_x] = num
print(snail)
next_y, next_x = get_next(cur_y, cur_x, cur_d)
if check_turn(next_y, next_x, n, snail):
cur_d = NEXT[cur_d]
cur_y, cur_x = get_next(cur_y, cur_x, cur_d)
for i in snail:
answer += i
return answer
itertools.chain(snail)