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

KimGwangmin·2026년 9월 29일

문제 링크

제출 코드(통과)

using System;

public class Solution {
    public int[] solution(int n)
    {
        var size = n * (n + 1) / 2;
        var answer = new int[size];
        var index = 0;
        var count = 1; // 1, 2, 3, ..., size
        var phase = 0; // 0: down, 1: right: 2: up
        var temp = 0; // to calc next index
        while (count <= size)
        {
            answer[index] = count++;
            var next = index;
            switch (phase)
            {
                case 0:
                    next += (++temp);
                    if (next >= size || answer[next] > 0)
                    {
                        phase = 1;
                        next = index + 1;
                    }
                    break;
                case 1:
                    next += 1;
                    if (next >= size || answer[next] > 0)
                    {
                        phase = 2;
                        next = index - (temp--);
                    }
                    break;
                case 2:
                    next -= (temp--);
                    if (next < 0 || answer[next] > 0)
                    {
                        phase = 0;
                        next = index + (++temp);
                    }
                    break;
            }

            index = next;
        }
        
        return answer;
    }
}

어렵게 생각하지 않고, 달팽이 방향으로 다음 인덱스를 찾아가며 숫자를 순서대로 채워넣었다. phase를 구분하여 다음 인덱스를 계산하고, 인덱스 범위를 벗어나거나 이미 채워진 곳이라면 방향을 바꾸어야 하므로 phase를 변경한다.

0개의 댓글