규칙만 찾으면 쉽게 풀 수 있다. 물론 그 규칙을 찾는게 어렵지만... 우선 2차원 배열을 층수에 맞게 0으로 초기화하여 생성해주고,
1. 위에서 아래로 내려갈때
2. 왼쪽에서 오른쪽으로 이동할때
3. 오른쪽에서 위로 이동할때
이 세가지로 나누어서 문제를 풀자!
// 3가지로 나누어서 풀자
// 1. 위에서 아래로 n번까지 내려가기, 그 후 n--;
// 2. 왼쪽에서 오른쪽으로 n번 이동하기, 그 후 n--;
// 3. 아래에서 위로 n번 올라가기, 그 후 n--;
// n > 0 유효할때까지 1~3번 반복
// 예시) n = 4 일경우
// 위에서 아래로 4번 내려가기
// 왼쪽에서 오른쪽으로 3번 내려가기
// 아래에서 위로 2번 올라가기
// 위에서 아래로 1번 내려가기
// 종료
function solution(n) {
var answer = [];
let arr = Array.from(Array(n), () => Array(n).fill(0))
let x = -1;
let y = 0;
let count = 0;
while(n > 0){
//아래로 내려가기
for(var i =0; i<n; i++){
x++;
count++;
arr[x][y] = count;
}
n-=1;
//오른쪽으로 가기
for(var i = 0; i<n; i++){
y++;
count++;
arr[x][y] = count;
}
// console.log(arr)
n-=1;
//위쪽으로 가기
for(var i = 0; i<n; i++){
y--;
x--;
count++;
arr[x][y] = count;
}
n-=1;
}
for(var i =0; i<arr.length; i++){
answer = [...answer, ...arr[i]];
}
return answer = answer.filter((d)=> d!==0);
}
규칙을 찾으면 쉬웠던 문제인데, 바로 생각하지 못하여 풀지 못했다. 규칙을 찾는 문제가 꼭 나오므로, 알고리즘 능력을 좀더 키워야겠다.