본문으로 바로가기

programmers. 외벽 점검

category Algorithm/문제 2021. 5. 28. 13:08

문제

문제

 

코딩테스트 연습 - 외벽 점검

레스토랑을 운영하고 있는 "스카피"는 레스토랑 내부가 너무 낡아 친구들과 함께 직접 리모델링 하기로 했습니다. 레스토랑이 있는 곳은 스노우타운으로 매우 추운 지역이어서 내부 공사를 하

programmers.co.kr

풀이

완전 탐색은 아직도 감이 잘 안잡힌다.. 더 많이 풀어봐야지

친구 수가 최대 8명이기 때문에 친구들의 점검 거리값으로 순열을 구해서 저장한 뒤

        [1,2,3,4],
        [1,2,4,3],
        [1,3,2,4],
        [1,3,4,2],
        [1,4,3,2]
        ...

구한 순열을 모두로 외벽을 점검해본다 이 때 외벽을 [1, 5, 6, 10] 차례대로 점검을 보낼 수도 있지만

[5, 6, 10, 1] 순서로도 보낼 수 있다 이 경우에는 벽이 원으로 둘러 쌓여있다는 점을 이용해서 [5, 6, 10, 13] 로도 표현이 가능하다 (shift->push)

코드

    function patrol(people, weakCopy) {
        const peopleC= [...people];
        const weakC = [...weakCopy];
        while (peopleC.length) {
            const pTemp = peopleC.shift();
            const wTemp = weakC.shift();

            while (weakC[0] <= (pTemp + wTemp)) {
                weakC.shift();
            }
        }
        return weakC.length;
    }


    function solution(n, weak, dist) {
        var answer = -1;
        const arr = [];

        for(let i=1; i<=dist.length;i++){
            arr.push(...getP(dist,i));
        }

        for(let i= 0;i<arr.length;i++){
            const people = [...arr[i]];
            const weakCopy = [...weak];
            const len = people.length;
            for(let i=0; i<weakCopy.length;i++){
                weakCopy.push(weakCopy.shift()+n);
                if(!patrol(people,weakCopy)) return len;
            }
        }
        return answer;
    }


    function getP(arr,len){
        const result = [];
        if(len===1) return arr.map(v=>[v]);

        arr.forEach((v,i)=>{
            const fixed = v;
            const rest = arr.filter((v,idx)=>i!==idx);
            const temp = getP(rest,len-1);
            const merge = temp.map(v=>[fixed,...v]);
            result.push(...merge);
        });

        return result;
    }

'Algorithm > 문제' 카테고리의 다른 글

baekjoon. 후위 표기식  (0) 2021.06.01
baekjoon. 괄호 제거  (0) 2021.05.29
baekjoon. 괄호의 값  (0) 2021.05.26
programmers. 기둥과 보 설치  (0) 2021.05.06
programmers. 광고 삽입  (0) 2021.05.05