문제설명
수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.
입출력 예를 보면
위의 그림을 위쪽부터 한 줄씩 가장 왼쪽 값부터 나열한다.
그럼....이문제를 우선 손으로 적으면서 이해해보자.
위 그림의 2차원 배열에서 행동을 3가지로 나눌 수 있다.
이 패턴이 계속 반복된다.
위 3가지 동작을 배열과 관련해서 이해해 보면
function solution(n) {
const numArr = [];
// 0으로 채워진 삼각달팽이의 틀(2차원 배열)을 만들기
for(let i = 1; i <= n; i++){
numArr.push(new Array(i).fill(0));
}
let row=-1, col=0;
// 각 배열에 채울 값
let curNum = 1;
for(let i = n; i > 0; i-=3){
for(let j = 0; j < i ; j++) {numArr[++row][col] = curNum++;}
for(let j = 0; j < i-1 ; j++) {numArr[row][++col] = curNum++;}
for(let j = 0; j < i-2 ; j++) {numArr[--row][--col] = curNum++;}
}
// 2차원 배열을 1차원 배열로 변경해서 반환해야함.
return numArr.flat();
}
모든 하위 배열 요소를 지정한 깊이까지 재귀적으로 이어붙인 새로운 배열을 생성하는 메서드
arr.flat(depth)
depth를 설정해주면 원하는 깊이만큼 평탄화 할 수 있다.