주어진 자연수 n에 따라 삼각형 형태로 숫자를 채워 넣는 문제
답안:
function solution(n) {
//예외
if(n === 1){
return [1]
}
if(n === 2){
return [1, 2, 3]
}
//결과 저장공간
const coordinate = new Array(n).fill(0).map((a, b) => new Array(b + 1));
//현재 위치
const location = [0, 0];
//다음 위치 더해줄 값
const addLocation = [[1, 0], [0, 1], [-1, -1]];
//다음 위치 인덱스값(방향)
let direction = 0;
//위치의 값
let num = 1;
while(true){
const [y, x] = location;
//현재 위치에 값이 있을경우 === 완전히 채워진 경우
if(coordinate[y][x]){
break;
}
//현재 위치에 값 저장
coordinate[y][x] = num;
//다음값
num++;
//다음위치
const [yPlus, xPlus] = addLocation[direction];
location[0] = y + yPlus;
location[1] = x + xPlus;
//다음 위치가 경계거나 값이 있을 경우 방향 변경
if(location[0] + yPlus === n || location[1] + xPlus === n || coordinate[location[0] + yPlus][location[1] + xPlus]){
direction = (direction + 1) % 3;
}
}
//2차원 배열을 1차월 배열로 변환
return coordinate.flat()
}