[코테] 프로그래머스 172928. 공원 산책

Dongmin Lee·2023년 6월 1일
0

코테

목록 보기
17/23

💿 문제

문제 링크

💾 문제 요약

다중배열 다루기

💿 풀이

이중 for문으로 시작 요소를 찾아 배열 current 에 담음.

routes를 순회하며 switch-case 문으로 예외 조건들을 걸러 내면서 current를 이동시킴.

💾 풀이 코드

function solution(park, routes) {
    const sero = park.length-1;
    const garo = park[0].length-1;
    const current = [];
    let cnt = 0;
    for(let i = 0; i< park.length; i++) {
        for(let j = 0; j<park[0].length; j++){
            if (park[i][j] === "S") {
                current.push(i);
                current.push(j); 
            }
        }
    }
    
    for(let i=0; i< routes.length; i++) {
        let cnt = 0;
        switch (routes[i][0]) {
          case "E" :
                if (current[1] + Number(routes[i][2]) > garo) break;
                
                for(let j = 1; j <= Number(routes[i][2]); j++ ) {
                    if(park[current[0]][current[1]+j] === "X") cnt++;
                }               
                
                if(cnt ===0) current[1] = current[1] + Number(routes[i][2]);
         break;
         case "W" :
                if (current[1] - Number(routes[i][2]) < 0) break;
            
                for(let j = 1; j <= Number(routes[i][2]); j++ ) {
                    if(park[current[0]][current[1]-j] === "X") cnt++;
                }              
            
                if (cnt === 0) current[1] = current[1] - Number(routes[i][2]);                  
         break;
          case "S" :
                if (current[0] + Number(routes[i][2]) > sero) break;

                for(let j = 1; j <= Number(routes[i][2]); j++ ) {
                    if(park[current[0]+j][current[1]] === "X") cnt++;
                }
                
                if(cnt === 0) current[0] = current[0] + Number(routes[i][2]);    
                
         break;
         case "N" :    
                if (current[0] - Number(routes[i][2]) < 0) break;
                
                for(let j = 1; j <= Number(routes[i][2]); j++ ) {
                   if(park[current[0]-j][current[1]] === "X") cnt++;
                }
                
                if(cnt === 0) current[0] = current[0] - Number(routes[i][2]);    
         break;
         default :
        }
    }
        
    return current;
}

💿 리마인더

할만했음.

profile
어제보다 성장하기

0개의 댓글