Game Develop

[Algorithm] Programmers :: 선입 선출 스케줄링 본문

Algorithm/Programmers

[Algorithm] Programmers :: 선입 선출 스케줄링

MaxLevel 2023. 4. 19. 01:09

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

 

프로그래머스

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

programmers.co.kr

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
int solution(int n, vector<int> cores) 
{
    int left = 0;
    int right = 200000;
    int mid = 0;
 
    if (n <= cores.size())
    {
        return n;
    }
 
    while (left + 1 < right)
    {
        int mid = (left + right) / 2;
        int workCounts = cores.size();
 
        if (mid > 0)
        {
            for (int i = 0; i < cores.size(); ++i)
            {
                workCounts += mid / cores[i];
            }
        }
 
        if (workCounts < n)
        {
            left = mid;
        }
        else 
        {
            right = mid;
        }
    }
 
    int leftCounts = cores.size();
 
    for (int i = 0; i < cores.size(); ++i)
    {
        leftCounts += left / cores[i];
    }
 
    for (int i = 0; i < cores.size(); ++i)
    {
        if ( (left+1) % cores[i] == 0)
        {
            ++leftCounts;
        }
 
        if (leftCounts == n)
        {
            return i + 1;
        }
    }
}
cs

 

일일이 하나씩 계산하면 시간초과.

그래서 우선순위큐로 매 시간씩 진행하면서 작업완료된것들을 체크하고 갱신시켜주는 식으로 했어도... 시간초과가 나왔다. 솔직히 이건 될 줄 알았는데;; 문제가 요구하는 능력이 다른것임을 깨달았다.

 

다른 사람의 풀이를 보니까 파라매트릭서치를 사용했다고 하길래, 처음 알게되는 키워드라 해당 기법부터 알아봤다.

문제를 재해석해서 구해야하는 해를 재설정한 다음에, 해당 해를 이분탐색으로 구하는 문제였다.

풀이를 안봤더라면 몇시간을 고민하든 못풀었을 것 같다.

 

봤던것 중 제일 이해 쉬운 풀이는 아랫글.

https://dev-note-97.tistory.com/173

 

[프로그래머스] 선입 선출 스케줄링 / Python

문제주소 :programmers.co.kr/learn/courses/30/lessons/12920 코딩테스트 연습 - 선입 선출 스케줄링 처리해야 할 동일한 작업이 n 개가 있고, 이를 처리하기 위한 CPU가 있습니다. 이 CPU는 다음과 같은 특징이

dev-note-97.tistory.com

 

이분탐색에 대한 글

 

https://www.acmicpc.net/blog/view/109

 

이분 탐색(Binary Search) 헷갈리지 않게 구현하기

개요 이분 탐색은 off-by-one error가 발생하기 쉬워서 늘 헷갈립니다. 이분 탐색 문제를 풀다보면 탈출 조건으로 lo <= hi, lo < hi, lo + 1 < hi 중 어느 걸 선택해야 할 지, 정답이 lo인지 hi인지 (lo + hi) / 2

www.acmicpc.net

 

 

이번 문제덕분에  새로운 영역을 조금 확장했다.