[프로그래머스] Lv1. 공원 산책- JavaScript

이상돈·2023년 3월 29일
0
post-thumbnail

문제분류 : 코팅테스트 연습

난이도 : Level 1

출처 : 프로그래머스 - 공원 산책

문제

제한사항

📌 내가 생각한 풀이

2차원 배열을 가지고 노는 문제이다. width랑 height를 length로 구하고, 주어진 제한사항에 알맞게 S지점에서 이동시키면 된다.
function solution(park, routes) {
    var answer = [];
    let start = [0,0];
    let arr = park.map((data)=>{
        return data.split('');
    })
    let width = arr[0].length;
    let height = arr.length;
    arr.map((d,i)=>{
        d.map((data,idx)=>{
            if(data === 'S'){
                return start = [i,idx]
            }
        })
    })
    routes.forEach((data,idx)=>{
        let command = data.split(' ');
        let count = 0;
        if(command[0] === 'N'){
            count = parseInt(command[1]);
            let check = true;
            let copy = parseInt(start[0]);
            if(copy - count >= 0){
                for(var i = 0; i<count; i++){
                    if(park[copy-1][start[1]] === 'X'){
                        check = false;
                        break;
                    }else{
                        copy--;
                    }
                }
                if(check){
                    start[0] = parseInt(start[0]-count);
                }
            }
            
        }else if(command[0] === 'S'){
            count = parseInt(command[1])
            let check = true;
            let copy = parseInt(start[0]);
            if(copy + count < height){
                for(var i = 0; i<count; i++){
                    if(park[copy+1][start[1]] === 'X'){
                        check = false;
                        break;
                    }else{
                        copy++;
                    }
                }
                if(check){
                    start[0] = parseInt(start[0]+count);
                }
            }
            
        }else if(command[0] === 'W'){
            count = parseInt(command[1])
            let check = true;
            let copy = parseInt(start[1]);
            if(copy - count >= 0){
                for(var i = 0; i<count; i++){
                    if(park[start[0]][copy-1] === 'X'){
                        check = false;
                        break;
                    }else{
                        copy--;
                    }
                }
                if(check){
                    start[1] = parseInt(start[1]-count);
                }
            }

            
        }else{
            count = parseInt(command[1])
            let check = true;
            let copy = parseInt(start[1]);
            if(copy + count < width){
                for(var i = 0; i<count; i++){
                    if(park[start[0]][copy+1] === 'X'){
                        check = false;
                        break;
                    }else{
                        copy++;
                    }
                }
                if(check){
                    start[1] = parseInt(start[1]+count);
                }
            }

        }
    })
    return start
}

📌 느낀점

비교적 간단한 문제지만, 세부사항을 하나하나 조밀히 따져야 하는 것에서 버그를 발견하는데 시간이 조금 걸렸다. 또한 2차원 배열이 약하다고 느껴서 추가적으로 보충학습을 해야겠다.

profile
사람들의 더 나은 삶을 위한 개발자

0개의 댓글