def solution(n):
answer = [[0] * i for i in range(1, n+1)]
answer[0][0] = 1
y, x = 0, 0
move = [[1,0],[0,1],[-1,-1]]
mode = 0
counter = 2
check = 0
while mode != 4 :
dy, dx = move[mode][0], move[mode][1]
if y+dy < n and x+dx < n :
if answer[y+dy][x+dx] == 0:
check = 0
y, x = y + dy,x + dx
answer[y][x] = counter
counter += 1
else :
mode = (mode+1) % 3
if check == 1 : mode = 4
check = 1
else :
mode = (mode+1) % 3
check = 1
sum_answer = []
for i in answer :
sum_answer += i
return sum_answer
# return sum(answer, []) 속도차이 7~8배 느림
문제정리
삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return
풀이과정
규칙을 찾아보고자 생각해봤지만 구현문제를 알고풀은 만큼 구현으로 풀고싶었다. 따라서 문제정리에 나와있는 것과같이 반시계 방향으로 달팽이 채우기를 직접 진행하였다.
어떻게 반시계 방향으로 채울지 규칙을 찾아보니 세가지 규칙을 발견할 수 있었다.
방향은 세가지로
왼쪽은 아래쪽방향으로 진행
아래는 오른쪽방향으로 진행
오른쪽은 위쪽방향으로 진행
을 반복하고 있었다.
규칙을 구현으로 풀이하였다.
풀이 후
다른풀이를 보니 크게 다르지는 않은 것 같다.
내가 사람보다는 깔끔하게 짠거같다는 생각이 들었다.