Programmers - 삼각 달팽이

SJ0000·2022년 5월 3일

문제 링크

구현 문제

내려가면서 추가하는 부분, 현재 줄에서 추가하는 부분, 올라가면서 추가하는 부분을 각각 분리해서 처리

더 깔끔하게 할 수 있을 것 같은데 하다보니 조잡해졌다.

def solution(n):
    # init
    triangle = [[] for _ in range(n)]
    for i in range(n):
        triangle[i] = [0 for _ in range(i+1)]

    def add_empty_front(layer, value):
        for i in range(len(triangle[layer])):
            if triangle[layer][i] == 0:
                triangle[layer][i] = value
                return

    def add_empty_rear(layer, value):
        for i in range(len(triangle[layer])-1, -1, -1):
            if triangle[layer][i] == 0:
                triangle[layer][i] = value
                return

    def move_a(layer, move_count, value):
        for i in range(move_count):
            layer += 1
            add_empty_front(layer, value)
            value += 1
        # next b
        return (layer, move_count-1, value)

    def move_b(layer, move_count, value):
        for i in range(move_count):
            add_empty_front(layer, value)
            value += 1
        # next c
        return (layer, move_count-1, value)

    def move_c(layer, move_count, value):
        for i in range(move_count):
            layer -= 1
            add_empty_rear(layer, value)
            value += 1
        # next a
        return (layer, move_count-1, value)

    params = (-1, n, 1)
    for i in range(n):
        if i % 3 == 0:
            params = move_a(params[0], params[1], params[2])
        elif i % 3 == 1:
            params = move_b(params[0], params[1], params[2])
        else:
            params = move_c(params[0], params[1], params[2])

    # print(triangle)
    
    answer = []
    for i in range(n):
        for x in triangle[i]:
            answer.append(x)

    return answer
profile
잘하고싶은사람

0개의 댓글