삼각달팽이
한~참 어렵게 생각하고 구현했다가, 어렵게 생각하고 구현했다가, 괜찮게 생각하고 구현했다가, 결국 엄청 쉬운거였음.
처음보는거라도 한 번 상상해보자. 생각보다 훨~씬 쉬울 수 있다.
Aps
1행에 1열, 2행은 2열, 3행은 3열... 을 갖는 2차원배열을 만든다.
dfs 할 때, 이동 방향을 적절히 넣어주면된다.
행의 인덱스 초과는 간단하고, 열은 (행 - 열) 이 음이 아니면 인덱스 안이다.
def solution(n):
a = [[0] * i for i in range(1, n + 1)]
x, y = 0, 0; d = 0
dx = [1, 0, -1]
dy = [0, 1, -1]
k = (n * (n + 1)) // 2
num = 1
while num < k:
a[x][y] = num
nx = x + dx[d]
ny = y + dy[d]
if 0 > nx or n <= nx or (nx - ny) < 0 or a[nx][ny] != 0:
d = (d + 1) % 3
nx = x + dx[d]
ny = y + dy[d]
x, y = nx, ny
num += 1
s = []
for v in a:
s.extend(v)
return s
Last updated
Was this helpful?