포스트

[프로그래머스] 기능 개발

코딩테스트 연습 - 디스크 컨트롤러 바로가기


문제 설명


01


문제 풀이

문제 설명처럼 작업은 100이 되었을 때, 완료되며
현재 작업이 완료되지 않으면 뒤에 작업은 100이 되어도 끝낼 수 없습니다.
따라서 현재까지 진행된 작업을 몇 번 더 진행해야 하는지 확인하고
그 횟수를 이용해 답을 구헀습니다.

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
int JOB_COUNT;
queue<int> job_queue;

void fill_job_queue(vector<int>& progresses, vector<int>& speeds) {
    for(int i = 0; i < JOB_COUNT; ++i) {

        // speeds[i] 에 딱 맞춰 완료되는 경우
        if((100 - progresses[i]) % speeds[i] == 0){
            job_queue.push((100-progresses[i]) / speeds[i]);
        } 
        // 남은 작업이 speeds[i] 으로 나누어 떨어지지 않아 한 번 더 작업해야 하는 경우
        else {
            job_queue.push((100-progresses[i]) / speeds[i] + 1);
        }
    }
}

vector<int> process_jobs() {
    vector<int> answer;
    while(false == job_queue.empty()) {
        int curr = job_queue.front();
        job_queue.pop();

        int cnt = 1;
        while(false == job_queue.empty() && job_queue.front() <= curr) {
            cnt += 1;
            job_queue.pop();
        }
        answer.emplace_back(cnt);
    }
    return answer;
}

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    JOB_COUNT = progresses.size();
    fill_job_queue(progresses, speeds);
    return process_jobs();
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.