삼각달팽이

문제

정수 n이 매개변수로 주어녔을때 밑변의 길이와 높이가 n 인 삼각형에서 맨 위꼭지점부터 반시계방향으로 달팽이 채우기

풀이

def solution(n):
    #목표
    target = sum(range(1, n+1))
    
    # 삼각형 초기화
    trian = [[0]*i for i in range(1,n+1)]

    # 다른 변수 초기화
    num = 1
    x,y = 0,0
    d = 0

    # 방향
    dirs = [(1,0),(0,1),(-1,-1)]

    #이동
    while num <= target:
        trian[x][y] = num
        num += 1

        # 다음방향으로 이동
        nx, ny = x + dirs[d][0], y + dirs[d][1]

        # 다음 위치가 유효한지 확인
        if nx < 0 or ny <0 or nx >= n or ny >= len(trian[nx]) or trian[nx][ny] != 0:
            d = (d + 1) % 3
            nx, ny = x + dirs[d][0], y + dirs[d][1]
        
        x, y = nx, ny
    
    result = []
    for row in trian:
        result.extend(row)
    return result

알게된 점

  • 삼각형으로 움직일때도 방향 리스트를 주고 그 안에서 이동하는게 가능하구나
  • 다음위치가 유효한지 확인하는 방법에 신경쓸것
  • list out of index error -> 그리드 초기화 부분을 반드시 먼저 확인할것!

Leave a comment