행마다 길이가 증가할 수 있도록 만들어 준다 !
const arr = Array.from({ length: n }, (_, i) => Array(i + 1).fill(0));
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부터 시작하는 자연수를 삼각형 형태로 채워넣는 문제이다.
예시 (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();
}