여름의 서재

[프로그래머스] 삼각 달팽이 (Python) 본문

알고리즘/프로그래머스

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

엉아_ 2022. 2. 28. 14:14
728x90

📕 문제

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

 

코딩테스트 연습 - 삼각 달팽이

5 [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] 6 [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11]

programmers.co.kr

 

💡 풀이법

1. 1부터 n^2까지 삼각형을 돌면서 숫자를 채워넣어야 한다.

2. 만약 n이 4라면 삼각형의 꼭대기에서 아래로 4번, 오른쪽으로 3번, 위로 2번, 아래로 1번 채워넣는다.

즉, 아래 n번 -> 오른쪽 n-1번 -> 위 n-2번 -> 아래 n-3번 -> 오른쪽 n-4번 -> .... ->1번

이런식으로 반복이 된다.

단, 위로 올라가는건 삼각형이기 때문에 열도 함께 앞으로 1씩 가야한다. 그래서 방향이 x=-1, y=-1이 된다.

dxy = [(1,0), (0,1), (-1,-1)]
def solution(n):
    answer = []
    matrix = [[0 for _ in range(n)] for _ in range(n)]
    x, y = -1, 0
    i = 1
    temp = n
    m = temp
    while i < n*(n+1)//2+1:
        if not m:
            temp -= 1
            m = temp

        x, y = x + dxy[(n-temp)%3][0], y + dxy[(n-temp)%3][1]
        matrix[x][y] = i

        i += 1
        m -=1

    for i in range(n):
        for j in range(n):
            if matrix[i][j]:
                answer.append(matrix[i][j])
    return answer
Comments