[Refresh ! 코딩 테스트 / js] -리코쳇 로봇

정대만·2025년 1월 24일

문제설명

  • 왔던 길 다시 가면 안됨
  • 최소의 수 니까 bfs
  • 왔던길 다시 가면 안된다고 했는데 G 를 보면 지나갔던 길을 다시 가는걸 볼수 있다.
  • 이 부분을 곰곰히 생각해보니 갔던길을 체크하는게 아닌, D 으로 막혀있는 곳이나 더이상 갈수 없어서 멈춘 곳을 갔던길로 체크하면된다느 것을 알게됨

나의 코드

function solution(board) {
  const arr_go= Array.from({length:board.length},()=>new Array(board[0].length).fill(0))
 
  const go_x=[0,0,-1,1]; 
  const go_y=[-1,1,0,0];
  let start;
  let end ;
  for(var i=0; i<board.length; i++){
      for(var z=0; z<board[0].length; z++){
          if(board[i][z]=='R') start=[i,z]
          if(board[i][z]=='G') end=[i,z];
      }
  }
  // 이렇게 시작과 끝을 정해놓음
    arr_go[start[0]][start[1]]=1;
    let queu=[[ start , 0]];
    // 가는거 
    

   
    while(queu.length>0){
        
        // 끝까지 갔을때 
        let [go,count]=queu.shift();
        // 뽑았을때 도착했다면 
        if(go[0]==end[0] && go[1]==end[1]) return count;
        for(var i=0; i<4; i++){
            // 가능 방향, 그리고 여기서 D 나올때 까지 쭉간다음 && 끝까지에 도착했다면 멈청야됨         
          
                let change_y= go[0]+go_y[i];
                let change_x= go[1]+go_x[i];
            while(change_y>=0 && change_y< board.length && change_x>=0 && change_x<board[0].length && board[change_y][change_x]!='D' ){
                
                // 방향 한번바꿨을때 갈수 있는 경우라면 계속 가는게 좋다. 
                 change_y+=go_y[i];
                 change_x+=go_x[i];
            }
           change_y-=go_y[i];
            change_x-=go_x[i]
            // D에 부딪히거나. 더이상 갈수 없는 경우일때 
            if(change_y>=0 && change_y< board.length && change_x>=0 && change_x<board[0].length &&arr_go[change_y][change_x]==0){
                // 안갔던 길일때만. 
                queu.push([[change_y,change_x] ,count+1])
                arr_go[change_y][change_x]=1;
            
                // 인 경우에만 간다고 가정. 
            }
           
            // 이 방향으로 쭉쭉가야되는데 
            
          
        }
        
        
    }
    
    
  return -1;
    
}
  • 중간에 while 부분에서 에러가 나서 어떻게 해야되나 고민을 했는데
    내가 안되면 while 문을 빠져나가세요 코드로 작성해서 그럼 안되기 직전의 값을 queue, 에 넣어야되겠다 생각을 했다.
  • 맞긴 했는데 코드가 너무 더러워서 남의 코드로 다시 공부를 해야되겠다.
profile
안녕하세요

0개의 댓글