Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

coding etude

[javascript] 공원산책 본문

algorithm

[javascript] 공원산책

코코리니 2024. 1. 7. 21:32

어려운 문제는 아니라고 생각이 든다. 

첫 시작점을 찾고, 이동의 조건에 마추어 이동과 멈춤을 조건식으로 표기하는 단순한 문제...

 

이문제의 중점은.. 얼마나 효율적으로 코드를 줄이는가...인건가..? 

다른 분들의 풀이를 보면 수학적인 요소가 가미된 풀이들이 눈에 뛴다,,,

가령 행렬의 계산 같은것...? 미리 routes의 값을 행렬로 만든 후 [a+행렬, b+행렬] 이런식으로..

조건문으로 ++, -- 없이 바로 행렬을 더해 버려서 수식과 로직을 좀더 간결이 한것..

가장 중요한 부분은 javascript에서 지원하는 함수들을 어느정도 잘 활용해야 한다는 점, spread syntax를 잘 활용해야 한다는 점.

끝. 

function solution(park, routes) {
    let answer = [];
    
    let maxA = park.length -1;
    let maxB = park[0].length -1;
    let a = park.findIndex(s => s.includes("S"));
    let b = park[a].indexOf("S");
    
    routes.forEach(el => {
        let tempA = a;
        let tempB = b;
        const [dist, num] = el.split(" "); // spread syntax..
        let pass = true;
        
        for(let i = 0; i < Number(num); i++){
            if(dist === "E"){
                tempB++;
            }
            else if(dist === "W"){
                tempB--;
            }
            else if(dist === "S"){
                tempA++;
            }
            else if(dist === "N"){
                tempA--;
            }
            
            if(tempA > maxA || tempA < 0 || tempB > maxB || tempB < 0 || park[tempA][tempB] === "X"){
                pass = false;
                break; // 조건 불충분 시 바로 다음 route로 넘어간다.
            }
        }
        // pass 확인 없이 바로 값을 입력하면 for 마지막에 false가 들어와도
        // 값을 입력하기때문에 꼭 마지막 까지 유효한 값인지 확인해야한다.
        if(pass){
            a = tempA;
            b = tempB;
        }
        
    });
    answer = [a, b]
    return answer;
}

 

'algorithm' 카테고리의 다른 글

[javascript]추억 점수  (1) 2023.12.23
[Javascript]달리기 경주  (0) 2023.08.09
[javascript] 햄버거 만들기  (0) 2023.01.09
[javascript] 푸드파이트 대회  (0) 2023.01.05
[Javascript] 과일 장수  (0) 2023.01.05