문제링크
https://programmers.co.kr/learn/courses/30/lessons/68645
정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요!
- n은 1 이상 1,000 이하입니다.
function solution(n) {
var answer = Array(n).fill(0).map((v,i) => Array(i+1).fill(0));
let count = 0;
let start = 0;
let len = 0;
let end = n;
const fin = (1 + n)*n/2 ;
while(start <= end){
for(let i=start; i<end; i++){if(count==fin) break;answer[i][len] = ++count; }
for(let i=len+1; i<end-len; i++){if(count==fin) break;answer[end-1][i] = ++count;}
for(let i=end-2; i>0; i--){if(count==fin) break;answer[i][i-len] = ++count;}
start+=2;
len++;
end-=1;
}
return answer.flat();
}
코드 실행하였을 때는 통과했는데 제출하니 실패했다...
function solution(n) {
var answer = new Array(n).fill().map((_,i) => new Array(i+1));
let count = 0;
let x = -1;
let y = 0;
while(n>0){
for(let i=0; i<n; i++) answer[++x][y] = ++count;
for(let i=0; i<n-1; i++) answer[x][++y] = ++count;
for(let i=0; i<n-2; i++) answer[--x][--y] = ++count;
n -= 3;
}
return answer.flatMap(e => e);
}