삼각형 배열 만드는법 (ft. 삼각 달팽이 문제)

dyeon-dev·2025년 6월 17일

자바스크립트

목록 보기
10/10

삼각형 배열 선언

행마다 길이가 증가할 수 있도록 만들어 준다 !

const arr = Array.from({ length: n }, (_, i) => Array(i + 1).fill(0));

  • Array.from({ length: n }
    - 이 부분은 크기가 n인 배열을 만들어서 각 인덱스(i)마다 특정 값을 채우는 용도로 사용된다.
  • (_, i) => Array(i + 1).fill(0))
    - 각 행(row)은 i+1개의 원소를 가지는 배열이다.
    • 즉, 첫번째 행은 1개, 두번째 행은 2개.. 마지막 행은 n개를 가진다.

예시: n=4일때

const arr = Array.from({ length: 4 }, (_, i) => Array(i + 1).fill(0));

[
  [0],           // i = 0 → 길이 1
  [0, 0],        // i = 1 → 길이 2
  [0, 0, 0],     // i = 2 → 길이 3
  [0, 0, 0, 0]   // i = 3 → 길이 4
]

삼각달팽이 문제 요약

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

정수 n이 주어질 때, 아래->오른쪽->대각선 왼쪽 위 순으로 회전하면서 1부터 시작하는 자연수를 삼각형 형태로 채워넣는 문제이다.

2차원 배열 풀이

  • n x n의 삼각형 2차원 배열을 만들고
  • 해당 좌표에만 값을 채운 다음
  • 마지막에 0이 아닌 값만 뽑아 flat() 또는 push() 해서 반환

예시 (n = 4):

1
2 9
3 10 8
4 5 6 7

이 배열을 달팽이 방향으로 채우면 다음과 같은 순서가 된다.
1. 아래로: (0,0) -> (1,0) -> (2, 0) -> (3, 0)
2. 오른쪽: (3, 1) -> (3, 2) -> (3, 3)
3. 대각선: (2, 2) -> (1, 1)
4. 아래로: (2, 1)
5. 오른쪽: (2, 2)

i%3을 통해 3방향(아래로, 오른쪽, 대각선)을 반복한다.

if(i%3==0)이라면, i값이 0, 3, .. 이므로 이땐, 아래 좌표인 x를 증가하며 arr 배열에 넣어준다.
else if(i%==1)이라면, i값이 1, 4,.. 이므로 이땐, 오른쪽 좌표인 y를 증가하며 arr 배열에 넣어준다.
else 나머지의 경우라면, i값이 2, 5, ..이므로 이땐, 대각선 위쪽으로 올라가면서 왼쪽으로 이동하도록 x--, y--를 해준다.

이렇게 (x, y) 좌표를 이동시켜가며 arr[x][y]=num++ 형태로 채워준다!

전체 코드

function solution(n) {
    const arr = Array.from({ length: n }, (_, i) => Array(i + 1).fill(0));
    let [x, y, num] = [-1, 0, 1];

    for (let i = 0; i < n; i++) {
        for (let j = i; j < n; j++) {
            if (i % 3 === 0) x++;
            else if (i % 3 === 1) y++;
            else {
                x--;
                y--;
            }
            arr[x][y] = num++;
        }
    }

    return arr.flat();
}
profile
https://github.com/dyeon-dev

0개의 댓글