target number를 설정하고, 여기에 도달할 때까지 while 문을 순회한다.
삼각형이므로
function solution(n) {
let answer = [];
let arr = [];
let tn = 0;
for(let i=1; i<=n; i++) {
tn += i;
arr.push(Array.from({length:i}, () => 0));
}
let x=0, y=-1, val=0;
while(val !== tn) {
for (let i=0; i<n; i++) {
// y++;
// val++;
arr[++y][x] = ++val;
}
for (let i=0; i<n-1; i++) {
// x++;
// val++;
arr[y][++x] = ++val;
}
for (let i=0; i<n-2; i++) {
// x--;
// y--;
// val++;
arr[--y][--x] = ++val;
}
n -= 3;
}
arr.forEach((_, i) => answer = [...answer, ...arr[i]]);
return answer;
}
console.log(solution(4));
또는 for문을 돌면서 answer = [...answer, ...a[i]]
를 해도 좋다.
function solution(n) {
let a = Array(n).fill().map((_, i) => Array(i + 1).fill())
let row = -1
let col = 0
let fill = 0
for (let i = n; i > 0; i -= 3) {
a[++row][col] = ++fill
for (let j = 0; j < i - 1; j++) a[++row][col] = ++fill
for (let j = 0; j < i - 1; j++) a[row][++col] = ++fill
for (let j = 0; j < i - 2; j++) a[--row][--col] = ++fill
}
return a.flat()
}