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

Updated:

문제 설명

정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.

examples.png

제한사항

  • n은 1 이상 1,000 이하입니다.

입출력 예

n result
4 [1,2,9,3,10,8,4,5,6,7]
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]

풀이과정

풀이 1

def solution(n):
    answer = []
    triangle = []
    m = []
    for i in range(1, n+1):
        triangle.append([0]*i)
        m.append(i)
    
    m.sort(reverse=True)
    
    cnt = 1
    x, y = 0, 0
    case = 0
    for i in range(n):
        # 4 -> 3 -> 2 -> 1
        for j in range(m[i]):
            if case == 0:
                triangle[x][y] = cnt
                cnt += 1
                x += 1
            elif case == 1:
                triangle[x][y] = cnt
                cnt += 1
                y += 1
            elif case == 2:
                triangle[x][y] = cnt
                cnt += 1
                x -= 1
                y -= 1
        if case == 0:
            x -= 1
            y += 1
        elif case == 1:
            y -= 2
            x -= 1
        elif case == 2:
            x += 2
            y += 1
        case += 1
        case = case % 3
    for t in triangle:
        answer += t
    return answer

Leave a comment