정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.
제한사항
입출력 예
n | result |
4 | [1,2,9,3,10,8,4,5,6,7] |
5 | [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] |
6 | [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11] |
function solution(n) { const answer = []; const length = n * (n + 1) / 2; let index = 0; let min = 1; let max = n - 1; let dir = 'd'; let round = 0; for(let i = 0; i < n; i++) { answer.push([]); } for(let i = 0; i < length; i++) { if(dir === 'd') { answer[index].splice(round, 0, i + 1); if(index === max) { // 오른쪽으로 꺾음 dir = 'r'; max--; } else { index++; } } else if(dir === 'r') { round ? answer[index].splice(-1 * round, 0, i + 1) : answer[index].push(i + 1); // 첫 바퀴에는 마지막에 붙여야되니 push if(answer[index].length === index + 1) { // 위로 꺾음 dir = 'u'; index--; } } else { round ? answer[index].splice(-1 * round, 0, i + 1) : answer[index].push(i + 1); // 첫 바퀴에는 마지막에 붙여야되니 push if((index === min) || answer[index].length === index + 1) { // 아래로 꺾음 dir = 'd'; min++; round++; index++; } else { index--; } } } return answer.flat(); }
현재 높이
index
, 올라가다 아래로 꺾을 위치min
, 내려가다 오른쪽으로 꺾을 위치max
, 방향을 나타내는 변수dir
, 몇 바퀴째 도는지 체크할round
를 만듦.등차수열 합으로 추가할 숫자 개수를 구하고, 그 만큼 반복문을 돌림.
마지막에 2차원 배열을
flat()
으로 1차원 배열로 바꿈.