삼각달팽이

https://programmers.co.kr/learn/courses/30/lessons/68645

한~참 어렵게 생각하고 구현했다가, 어렵게 생각하고 구현했다가, 괜찮게 생각하고 구현했다가, 결국 엄청 쉬운거였음.

처음보는거라도 한 번 상상해보자. 생각보다 훨~씬 쉬울 수 있다.

  • Aps

    1. 1행에 1열, 2행은 2열, 3행은 3열... 을 갖는 2차원배열을 만든다.

    2. dfs 할 때, 이동 방향을 적절히 넣어주면된다.

    3. 행의 인덱스 초과는 간단하고, 열은 (행 - 열) 이 음이 아니면 인덱스 안이다.

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