티스토리 뷰

문제


https://programmers.co.kr/learn/courses/30/lessons/43238

 

풀이


처음에 문제풀이 방법을 떠올리기 쉽지 않은 문제다.

풀이 시 다음 사람을 어떤 심사관에 배정할까 ? 라는 의문으로 시작하면 가능한 방법이 떠오르지 않는다.

이 문제는 파라메트릭 서치 개념을 사용해서 풀이할 수 있다.

파라메트릭 서치란 최적화 문제를 결정 문제로 바꾸어서 풀이하는 개념이다.

이 문제의 경우 "심사시간이 주어졌을 때, N명의 사람을 모두 심사할 수 있는가?" 라는 내용으로 주어진 시간 범위 내에서 이분탐색을 진행하며,

N명의 사람을 심사할 수 있는가? 를 확인 후 N명의 사람을 모두 심사할 수 있는 시간들 중 최소값을 정답으로 결정하면 된다.

 

소스 코드


 

#include <string>
#include <vector>
#include <algorithm>

const long long MAX_TIME = 1e9;

using namespace std;

long long solution(int n, vector<int> times) {
    
    sort(times.begin(), times.end());
    
    long long maxTime = MAX_TIME * n; // 최대 소요시간
    
    long long left = 1, right = maxTime;
    long long cntOfExamined = 0;
    
    while(left <= right){
        
        long long mid = (left + right) / 2; // 현재 시간
        
        cntOfExamined = 0; // 현재 시간이 mid일 경우 심사가능한 사람 수
        for(const auto time : times)
            cntOfExamined += mid / time;        
        
        // 심사한 사람의 수가 N명보다 크거나 작으면 시간을 줄여본다
        if(cntOfExamined >= n)
            right = mid - 1;
        else
            left = mid + 1; 
        
    }
    
    return answer = left;
}

 

'알고리즘 > 프로그래머스' 카테고리의 다른 글

[프로그래머스] 가장 먼 노드  (0) 2021.08.24
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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 31
글 보관함