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



1. 문제

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

2. 풀이

[1] 
[2][9]
[3][10][8]
[4][5][6][7]
  • 피라미드는 위와 같은 방식으로 배열로 표현하였습니다.
  • 1~3, 4~6, 7~9 처럼 3씩 증가할수록 삼각형 개수가 바뀝니다.
  • 왼쪽변, 아래변, 우측변 기준으로 값을 채워 넣습니다.
# 1~3 | 4~6 | 7~9 처럼 3씩 증가할수록 삼각형 개수가 바뀜
def solution(n):
    count = 1
    r_cnt = 0
    arr = [[0] * n for _ in range(n)]

    while count < n*(n+1)/2:
        # 해당 삼각형 크기에서 한 변을 채우는데 필요한 카운트
        search_dist = n - 1 - 3 * r_cnt
        # 삼각형 왼쪽변
        for i in range(search_dist):
            arr[r_cnt * 2 + i][r_cnt] = count
            count += 1
        # 삼각형 밑변 
        for i in range(search_dist):
            arr[n - 1 - r_cnt][r_cnt + i] = count
            count += 1
        # 삼각형 오른쪽변
        for i in range(search_dist):
            arr[n - 1 - i - r_cnt][n - 1 - i - 2 * r_cnt] = count
            count += 1
        # 라운드 1 증가
        r_cnt += 1

    answer = []
    for i in range(n):
        for j in range(i+1):
            # 가운데 딱 한 숫자만 들어갈 경우 0으로 채워져 있음. 마지막 숫자를 넣어줌
            if arr[i][j] == 0:
                answer.append(count)
            else:
                answer.append(arr[i][j])

    return answer