2023-04-19 삼각 달팽이
Summary
생각한 부분
문제에서 요구하는 반시계 방향의 삼각 달팽이 모양을 어떻게 만들 수 있을까? 위에서부터 순서대로 리스트에 기록한다고 하면
1
2
3
4
1
2 9
3 10 8
4 5 6 7
와 같은 식으로 표현하는 방법이 먼저 생각이 난다.
그럼 반시계 방향으로 회전하는 부분은 리스트의 범위를 벗어나거나 이미 배열에 초기값 0이 아닌 다른 값이 기록되어 있는 경우 방향을 전환하도록 구현하면 될 것이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
def solution(n):
"""
1
2 9
3 10 8
4 5 6 7
"""
dx, dy = [1, 0, -1], [0, 1, -1]
arr = [[0] * n for _ in range(n)]
start = 1
x, y = 0, 0
d = 0
last = n * (n+1) // 2
while start <= last:
arr[x][y] = start
start += 1
nx, ny = x + dx[d], y + dy[d]
if nx < 0 or nx >= n or ny < 0 or ny >= n or arr[nx][ny] != 0:
d = (d+1) % 3
nx, ny = x + dx[d], y + dy[d]
x, y = nx, ny
ans = []
for i in range(n):
for j in range(i+1):
ans.append(arr[i][j])
return ans