풀이 방법
- 달팽이는 하, 우, 상 의 순서로 계속 반복함
- 한번 방문한 곳에 부딪히거나, 범위의 끝에 가면 바로 다음 방향으로 꺾어서 진행함
풀이 코드
def solution(n):
total = (n + 1) * n // 2
ls = [[] for _ in range(n)]
visited = [[] for _ in range(n)]
for i in range(1, n + 1):
ls[i - 1] = [0] * i
visited[i - 1] = [False] * i
nx, ny = 0, 0
flag = 1
i = 2
visited[0][0] = True
ls[0][0] = 1
while i <= total:
if flag == 1:
nx += 1
if len(ls) <= nx or visited[nx][ny]:
flag = 2
nx -= 1
else:
ls[nx][ny] = i
i += 1
visited[nx][ny] = True
elif flag == 2:
ny += 1
if len(ls[nx]) <= ny or visited[nx][ny]:
flag = 3
ny -= 1
else:
ls[nx][ny] = i
i += 1
visited[nx][ny] = True
else:
nx -= 1
ny -= 1
if (nx < 0 and ny < 0) or visited[nx][ny]:
flag = 1
nx += 1
ny += 1
else:
ls[nx][ny] = i
i += 1
visited[nx][ny] = True
return ls