[JS][프로그래머스 -LEVEL 3 - 입국심사]

정대만·2023년 9월 22일

코딩테스트

목록 보기
45/51

문제해석

  • 제한 사항을 보면 거의 1억이 넘는 수가 들어가 있다.

  • 저번에서 봣듯이 1억이 넘으면 무조건 이분탐색이라는것을
    캐치해야된다.

    처음 풀었을때 틀린이유

  • 로직은 똑같았지만 , n 수가 나올때 return 해라 ! 해서 틀렸다. 우리가 구하는건 n 가 맞다. 하지만 n수가 나오는 경우는 여러개 이다.

    예를들어 6 [7, 10] , 28(정답)
    이지만 이분법을 돌리다보면 29 도 28도 똑같은 6을 배출한다. 이런 경우 작은 수를 구해야되기 때문에 math.min 수로 계[속 변경해야된다.

function solution(n, times) {
    var answer = 0;
    times.sort((a,b)=>a-b);
    var max_time= times[times.length-1]*n;

    var left=0; 
    var right= max_time;
    var answer=right;
    
    while(right>=left){
        var mid= Math.floor( (left+ right)/2);
        var sum_total=0;
        times.map((el)=> sum_total+=Math.floor(mid/el));        
                  
        if(sum_total>=n){
            answer=Math.min(answer,mid);
            right= mid-1;
        }
        else{
            left=mid+1;
        }
    }
    //여기까지 했는데 인되는 경우 하나씩 더할까..^^;;
    

    return answer;
}

//solution(10,[6,8,10])
profile
안녕하세요

0개의 댓글