[프로그래머스] 기능 개발
코딩테스트 연습 - 디스크 컨트롤러 바로가기
문제 설명
문제 풀이
문제 설명처럼 작업은 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 라이센스를 따릅니다.