[프로그래머스] 삼각 달팽이 (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
반응형
TAGS.

Comments