본문 바로가기
  • 실행력이 모든걸 결정한다
Algorithm/Stack & Queue

[스택/큐, 난이도 중하] 프로그래머즈, 기능개발

by 김코더 김주역 2020. 9. 15.
반응형

먼저 배포되어야 하는 작업의 순서가 정해져 있는 것을 보아 큐를 이용하여 푸는 문제임을 알 수 있었다.

이번엔 큐 라이브러리를 이용하지 않고 현재 작업중인 작업 번호 변수를 만들어 큐의 역할을 흉내냈다.

큐를 이용한다면 입력 vector의 요소들을 큐에 모두 넣는 작업이 필요한데 굳이 그럴 필요까진 없었기 때문이다.

 

앞에 있는 task의 진도율이 100이 아닌 경우, 100이 나올 때 까지 계속해서 현재 진도율에 speed값을 더해준다. 반복할때마다 날짜는 1씩 더해준다.

 

그리고 앞에 있는 task의 진도율이 100을 달성 했을 경우, 한번에 배포할 수 있는 작업수와 작업 번호를 모두 1씩 증가시켜주면 된다. 그 뒤에 있는 task들에도 날짜와 speed를 곱한 값을 더해보고 진도율이 100을 달성 했을 경우 역시, 작업수와 작업 번호를 1씩 증가 시켜준다.

 

테스트 11개 모두 통과

 

#include <vector>
using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    int date=0; //일 수
    int pack=0; //한번에 배포 할 수 있는 작업 묶음 수
    int tasknum=0; //작업 번호
    int ps=progresses.size();
    vector<int> answer;
    
    while(tasknum<ps){
        while(tasknum<ps&&progresses[tasknum]<100){ //작업 미완료
            progresses[tasknum]+=speeds[tasknum];
            date++;
        }
        while(tasknum<ps&&progresses[tasknum]>=100) { //작업 완료
            pack++;
            tasknum++;
            if(tasknum>=ps) break;
            progresses[tasknum]+=(speeds[tasknum]*date);
        }
        if(pack>=1){
            answer.push_back(pack);
            pack=0;
        }      
    }
    return answer;
}
반응형

댓글