달팽이는 반 시계 방향으로 돌아다니고, 지나간 순서를 배열에 담아 출력하면 그만이다.
def solution(n):
answer = []
arr = [[0] * n for _ in range(n)]
i = 0
idx = [0, 0, n]
m=1
while True:
n-=1
if i == 0:
same_col(arr, idx, m)
m+=idx[2]
idx[0],idx[1], idx[2] = idx[0]+n,idx[1]+1, idx[2]-1
if n == 0:
break
i+=1
continue
if i == 1:
same_row(arr, idx, m)
m+=idx[2]
idx[0], idx[1], idx[2] = idx[0]-1, idx[1]+n-1, idx[2]-1
if n == 0:
break
i+=1
continue
if i == 2:
both_decrease(arr, idx, m)
m+=idx[2]
idx[0], idx[1], idx[2] = idx[0]-n+1, idx[1]-n, idx[2]-1
if n== 0:
break
i-=2
continue
for i in range(len(arr)):
for j in range(len(arr[i])):
if arr[i][j] != 0:
answer.append(arr[i][j])
return answer
def same_col(arr, idx, n):
x, y, count = idx
for i in range(count):
arr[x+i][y] = n
n+=1
def same_row(arr, idx, n):
x, y, count = id
# print('same_row', idx)
for i in range(count):
arr[x][y+i] = n
n+=1
def both_decrease(arr, idx, n):
x, y, count = idx
for i in range(count):
arr[x-i][y-i] = n
n+=1
print(solution(6))
혹시 다른 규칙같은게 있을까 열심히 머리를 굴려봤지만 애초에 문제는 구현 능력을 보는 것 같았다.
실제로 값이 증가하는 순서에 따라 아래로 내려가기, 오른쪽으로 이동하기, 위로가면서 왼쪽으로 가기를 3가지 함수를 만들었다.
결과는 잘 동작했지만, 시간이 너무 오래걸렸다.
구현을 익숙해 지기 위해 풀만한 좋은 문제인 것 같다.
자주 풀어봐서 쉽게 배열의 인덱스 개념이 머리에 들어오길 바래야겠다.