[프로그래머스] 삼각 달팽이

 

문제

def solution(n):
    answer = []
    num_list = [[0] * i for i in range(1, n + 1)]  # 삼각형 배열 초기화
    
    x, y = 0, 0  # 시작 위치
    cnt = n * (n + 1) // 2  # 채워야 할 총 숫자
    dx = [1, 0, -1]  # x 변화량 (아래 -> 오른쪽 -> 대각선 위-왼쪽)
    dy = [0, 1, -1]  # y 변화량
    d = 0  # 현재 방향 (0: 아래, 1: 오른쪽, 2: 대각선 위-왼쪽)
    
    for i in range(1, cnt + 1):
        num_list[x][y] = i  # 현재 위치에 숫자 채우기
        
        # 다음 위치 계산
        nx, ny = x + dx[d], y + dy[d]
        
        # 다음 위치가 범위를 벗어나거나 이미 채워져 있으면 방향 전환
        if nx >= n or ny < 0 or ny >= len(num_list[nx]) or num_list[nx][ny] != 0:
            d = (d + 1) % 3 
            nx, ny = x + dx[d], y + dy[d]
        
        # 위치 갱신
        x, y = nx, ny
    
    answer = [num for row in num_list for num in row]
    return answer