프로그래머스

[프로그래머스] 방문 길이 (javascript)

해랑쓰 2021. 4. 24. 02:49
728x90
반응형

변을 기준으로 하는 bfs문제는 처음 풀었다. 

방문 기준을 어떻게 해야할지 고민했는데 시작점과 끝점이 연결된 변을 방문 표시하기 위해서 

(y,x,yy,xx)를 하나의 쌍으로 방문 배열에 넣고 같은 것이 있는지 찾았다.

만약 vis배열에 있다면 방문했던 곳이므로 answer를 증가시켜주지 않는다.

 

function solution(dirs) {
    var answer = 0;
    let xpos=[0,0,1,-1];//DURL
    let ypos=[1,-1,0,0];
    const dict={
        'D':0,
        'U':1,
        'R':2,
        'L':3
    };
    let vis=[];
    let y=5
    let x=5;
    for(let i=0;i<dirs.length;i++){
        let yy=y+ypos[dict[dirs[i]]];
        let xx=x+xpos[dict[dirs[i]]];
        if(yy<0 || xx<0 || yy>10 ||xx>10)continue;
        let first=true;
        for(let k=0;k<vis.length;k++){
            const [a,b,c,d]=vis[k];
            if(a==y && b==x && c==yy && d==xx){
                first=false;
                break;
            }
        }
        if(first){
            answer+=1;
             vis.push([y,x,yy,xx]);
            vis.push([yy,xx,y,x]);
        }
        y=yy;
        x=xx;
    }
    
    return answer;
}
728x90
반응형