PS/프로그래머스

[프로그래머스][map] 충돌 위험 찾기

꽁이꽁설꽁돌 2025. 7. 4. 15:16
728x90
반응형
     

목차

     

    문제

    https://school.programmers.co.kr/learn/courses/30/lessons/340211#

     

    프로그래머스

    SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

    programmers.co.kr

     

     

    문제 구현 시 아이디어 및 가져갈 점

    1. 좌표가 중복되는 것은 map을 통해 세주고 길이가 2이상이면 누적한다.

    2. 이때 map의 키는 각 시간대를 포함한다. 따라서 모든 좌표를 한 타임마다 이동시켜가면서 누적시킬 필요가 없다.

     

     

    코드 구현

    let m = new Map();
    
    function recordPath(t, r, c){
        let str = `${t}-${r}-${c}`;
        m.set(str, (m.get(str) || 0) + 1);
    }
    
    function solution(points, routes) {
        var answer =0;
        for(const route of routes){
            let t =0;
            let [r, c] = points[route[0]-1];
            recordPath(t, r, c);
            for(let idx =1; idx< route.length; idx++){
                let [nr, nc] = points[route[idx]-1];
                let rstep = nr > r ? 1: -1;
                let cstep = nc > c ? 1: -1;
                while(nr !== r){
                    t++;
                    r += rstep;
                    recordPath(t, r, c);
                }
                 while(nc !== c){
                    t++;
                    c += cstep;
                    recordPath(t, r, c);
                }
            }
           
        }
         for(let cnt of m.values()){
               if(cnt >1) answer++;
            }
        return answer;
    }
    반응형