[프로그래머스] 삼각 달팽이 (javascript)
728x90
반응형
삼각달팽이가 이동하는 방향을 아래쪽, 오른쪽, 왼쪽 대각선위로 반복하면서 이동한다
아래쪽: y값 증가
오른쪽: x값 증가
대각선 위 : x값 1감소, y값 1 감소
해당 방향으로 계속 이동하다가 끝에 다다르거나 이미 작성한 원소까지 도달해서 하는 시점이 방향을 새로 바꿀 시점이다. 방향 dir에서 +1하고 반복하기 위해 %연산자로 나눠준다.
달팽이 숫자를 보면 n일 때 1부터 n까지의 합인 n*(n+1)/2까지 이동하는 걸 볼 수 있다
따라서 해당 숫자까지 쓰면 종료시켜준다.
이차원 배열에 맞는 위치에 써준 뒤 내부 배열을 합쳐준다.
function solution(n) {
const xpos=[0,1,-1];
const ypos=[1,0,-1]
const m=new Array(n);
for(let i=0;i<n;i+=1){
m[i]=new Array(i+1).fill(0);
}
const fin=Math.floor(n*(n+1)/2);
let dir=0;
let [x,y]=[0,0];
m[y][x]=1;
let num=2;
while(num<=fin){
let yy=y+ypos[dir];
let xx=x+xpos[dir];
if(xx>=0 && xx<n && yy>=0 && yy<n && m[yy][xx]===0){
m[yy][xx]=num++;
y=yy;
x=xx;
}else{
dir=(dir+1)%3;
}
}
const answer=m.reduce((acc,arr)=>{
return acc.concat(arr);
},[]);
return answer;
}
728x90
반응형
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 124 나라의 숫자 (javascript) (0) | 2021.01.21 |
---|---|
[프로그래머스] 스킬트리 (javascript) (0) | 2021.01.21 |
[프로그래머스] 다리를 지나는 트럭 (javascript) (0) | 2021.01.20 |
[프로그래머스] 프린터 (javascript) (0) | 2021.01.20 |
[프로그래머스] 기능 개발 (javascript) (0) | 2021.01.19 |
TAGS.