Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발계발

프로그래머스 - 삼각달팽이(68645) 본문

알고리즘

프로그래머스 - 삼각달팽이(68645)

Ju_Nik_E 2024. 5. 1. 10:32

문제 설명

 

제한사항

- n은 1 이상 1,000 이하이다.

 

접근 방식

1. 길이가 1인 것부터 n인 것까지 2차원배열을 생성

2. 숫자를 채운다(숫자의 최댓값은 n * (n+1) // 2)

2-1. 방향을 나눈다. 내려갈때(1,0), 오른쪽(0,1), 올라갈 때(-1,-1)

3. graph를 1차원 배열로 바꿔서 return

 

def snail_graph(graph):
    n = len(graph)
    max_value = n * (n + 1) // 2
    number = 1
    x, y = 0, 0
    direction = "down"
    moves = {"down": (1, 0), "right": (0, 1), "up": (-1, -1)}

    graph[x][y] = number

    while number < max_value:
        nx, ny = x + moves[direction][0], y + moves[direction][1]

        if 0 <= nx < n and 0 <= ny <= nx and graph[nx][ny] == 0:
            x, y = nx, ny
            number += 1
            graph[x][y] = number
        else:
            if direction == "down":
                direction = "right"
            elif direction == "right":
                direction = "up"
            else:
                direction = "down"

def solution(n):
    answer = []
    graph = []
    
    for i in range(1, n+1):
        tmp = [0 for _ in range(i)]
        graph.append(tmp)
        
    snail_graph(graph)
    
    for i in range(n):
        for j in range(len(graph[i])):
            answer.append(graph[i][j])
    
    return answer