정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.
n은 1 이상 1,000 이하입니다.
function solution(n) {
var answer = [];
for(let i=1;i<=n;i++){
let arr = Array.from(n);
answer.push(arr);
}
// 왼쪽
for(let i=0;i<n;i++){
answer[i].push(i+1);
}
// 아래
for(let i=n+1;i<n+n;i++){
answer[answer.length-1].push(i);
}
let num = n+n;
let idx = n-2;
// 나머지 채우기
while(idx < n){
if(answer[idx].length < idx+1){
answer[idx].push(num);
idx--;
num++;
}else if(answer[idx].length === idx+1){
idx++;
}else{
continue;
}
}
return answer;
}
문제에서 의도한대로 달팽이 모양으로 채우려면 아래의 세 동작을 반복해주어야 한다.
function solution(n) {
let answer = [];
let [count, currentX, currentY] = [0, -1, 0];
let arr = Array.from({ length: n }, (_, index) => Array(index + 1).fill(0));
while (n > 0) {
for (let i = 0; i < n; i++) {
// 위에서 아래로
currentX++;
count++;
arr[currentX][currentY] = count;
}
for (let i = 0; i < n - 1; i++) {
// 왼쪽에서 오른쪽으로
currentY++;
count++;
arr[currentX][currentY] = count;
}
for (let i = 0; i < n - 2; i++) {
// 아래에서 위로
currentX--;
currentY--;
count++;
arr[currentX][currentY] = count;
}
n -= 3;
}
return arr.flat();
}
2차원 배열 1차원 배열로 만들기 : arr.flat( )