티스토리 뷰

반응형
프로그래머스 삼각 달팽이 문제 풀이

프로그래머스 문제명: 삼각 달팽이


문제

📝 문제 설명

정수 n이 주어졌을 때, 높이와 밑변이 n정삼각형 형태의 2차원 배열을 생각합니다.
맨 위 꼭짓점에서 시작하여 반시계 방향으로 달팽이 채우기를 진행합니다.

달팽이 채우기 순서는 다음과 같습니다:

  • 아래 방향 ↓
  • 오른쪽 방향 →
  • 왼쪽 위 대각선 ↖

(이 순서를 반복)

그리고 이 삼각형 모양 배열을 한 줄 배열로 평탄화(flatten)하여 반환합니다.


테스트케이스

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]

문제 작동 원리

삼각형의 모양은 다음과 같이 row마다 column 개수가 다릅니다.

예를 들어 n = 4일 때:

row 0 → 1칸
row 1 → 2칸
row 2 → 3칸
row 3 → 4칸

총 칸 수 = 1 + 2 + 3 + ... + n = \( \frac{n(n+1)}{2} \)

→ 각 칸에 1부터 시작해서 순서대로 채우면 됩니다.
이때 방향은 ↓ → ↖를 반복합니다.


아이디어

📌 배열 초기화

삼각형 구조를 위해 row마다 길이가 다른 2차원 배열을 생성합니다:

ans = [[0 for j in range(i)] for i in range(1, n+1)]

📌 방향 제어 변수 k

  • k == 0: 아래로 이동 (row += 1)
  • k == 1: 오른쪽으로 이동 (col += 1)
  • k == 2: 왼쪽 위 대각선 이동 (row -= 1, col -= 1)
  • → 이후 k = (k+1) % 3로 순환

📌 반복 구조

  • 가장 바깥쪽 반복문은 i = n, n-1, ..., 1 (총 n번)
  • 각 방향마다 i개의 칸을 채움

📌 마지막에 결과 추출

  • 이중 리스트(ans)를 순서대로 1차원 배열로 합칩니다

전체 코드

def solution(n):
    answer = []
    ans = [[0 for j in range(i)] for i in range(1, n + 1)]

    k = 0
    row = 0
    col = 0
    x = 1

    for i in range(n, 0, -1):
        for j in range(i):
            ans[row][col] = x
            x += 1
            if j == i - 1:
                break
            if k == 0:
                row += 1
            elif k == 1:
                col += 1
            elif k == 2:
                row -= 1
                col -= 1
        if k == 0:
            col += 1
        elif k == 1:
            row -= 1
            col -= 1
        elif k == 2:
            row += 1
        k = (k + 1) % 3

    for an in ans:
        for i in an:
            answer.append(i)

    return answer

결론

  • n 크기의 삼각형을 만들고, 반시계 방향으로 달팽이 채우기를 진행합니다.
  • 이동 방향은 ↓ → ↖ 순서로 반복하며, 각 루프마다 길이를 하나씩 줄여가며 채웁니다.
  • 방향 전환 시 좌표를 미세 조정하는 로직이 핵심입니다.
  • 최종적으로 삼각형 모양의 리스트를 평탄화하여 반환합니다.

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/09   »
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
글 보관함
반응형