문제/프로그래머스

[프로그래머스] 선입 선출 스케줄링 - Java

icodesiuuuu 2024. 8. 30. 22:25

문제

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

 

프로그래머스

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

programmers.co.kr

 


단순 반복문으로 시도하면 시간 초과 및 효율성 실패가 발생하는 문제

이진탐색으로 해결할 수 있다

 

import java.util.*;
class Solution {    
    public int solution(int n, int[] cores) {
        int answer = 0;
        int min = 0, max = 10_000 * n;
        int work = 0, time = 0;
        
        while(max >= min) {
            int mid = (max+min)/2;
            int cnt = cal(mid, cores);
            
            if(cnt >= n) {
                max = mid-1;
                time = mid;
                work = cnt;
            } else {
                min = mid+1;
            }
        }
        
        
        for(int i=cores.length-1; i>=0; i--) {
            if(time%cores[i] == 0) {
                if(work == n) {
                    answer = i+1;
                    break;
                }
                work--;
            }
        }
        return answer;
    }
    
    public static int cal(int mid, int[] cores) {
        int cnt = cores.length;
        for(int i=0; i<cores.length; i++) {
            cnt += (mid/cores[i]);
        }
        return cnt;
    }
}

 

 

이진탐색 추천 문제

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

 

프로그래머스

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

programmers.co.kr