DevLog:-)

[프로그래머스][JavaScript]입국심사 본문

알고리즘/프로그래머스

[프로그래머스][JavaScript]입국심사

hyeon200 2023. 9. 27. 17:59
반응형

문제 

입국 심사

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

function solution(n, times) {
    var answer = 0;
    return function solution(n, times) {
    let left = 1;
    let right = Math.max(...times) * n; // 이진 탐색의 시작과 끝 범위 설정

    let answer = 0;
    while (left <= right) {
        const mid = Math.floor((left + right) / 2); // 중간값을 구함
        let count = 0;

        // 중간값(mid) 시간 동안 각 심사관이 몇 명을 처리할 수 있는지 계산
        for (const time of times) {
            count += Math.floor(mid / time);
        }

        // 처리한 사람 수(count)가 대기하는 사람 수(n)보다 작으면
        // 시간을 늘려서 처리할 수 있는지 확인
        if (count < n) {
            left = mid + 1;
        } else {
            answer = mid;
            right = mid - 1;
        }
    }

    return answer;
}answer;
}
function solution(n, times) {
    const sortedTimes = times.sort((a,b)=>a-b);
    let left = 1;
    let right = sortedTimes[sortedTimes.length - 1]*n;
    while(left <= right) {
        const mid = Math.floor((left + right)/2);
        const sum = times.reduce((acc,time) => acc + Math.floor(mid/time),0);
        if(sum < n){
            left = mid + 1;
        } else {
            right = mid -1;
        }
    }
    return left;
}

 

 

✅check point

Math.floor() 작거나 같은 가장 큰 정수로 반환 (소수점 없애기)
reduce((r,c,i)=>r+c,0) r:누적값
c: 현재 요소
i: 현재 인덱스
ex) 배열의 각 요소에 대해 주어진 함수를 실행하고 하나의 값으로 축소

 

💡idea 요약

이분 탐색 숫자 큼 -> 로그시간으로 풀어야함
조건에 맞는 특정 값 찾기(파라메트릭 서치 parametric search)
로직 
중간값(mid)을 설정하고 이를 기준으로 대기 중인 사람 수를 계산하여 이동 범위를 조정하기


1. 초기화 : 최소 심사 시간(left), 최대 심사 시간(right)으로 초기화

2. 이분 탐색 : leftright보다 작거나 같을 때까지 다음을 반복
- 중간값(mid) 시간 동안 각 심사관이 몇 명을 처리할 수 있는지(count) 계산  
- 처리된 사람 수(count)가 대기하는 사람 수 n보다 작으면, 심사 시간을 더 늘려야 하므로 leftmid + 1로 업데이트
- 그렇지 않으면 더 짧은 시간을 찾기 위해 rightmid - 1로 업데이트

 

반응형