본문 바로가기

알고리즘 풀이/프로그래머스

스택/큐 - 기능개발

https://www.welcomekakao.com/learn/courses/30/lessons/42586

 

문제를 푸는 로직은 아래와 같다.

1. 각 기능의 완료기간을 계산하고 queue 에 넣는다. (11~20 line)
이때 주의해야할 점은 딱 100이 되는 순간이 완료기간이므로 나머지 값 유/무 여부를 따져야한다. (15~18 line)
2. queue 를 순회하기 이전에 가장 맨앞의 작업이 완료되는 기간을 미리 저장해둔다. (22 line)
3. 이제 queue 순회하면서 작업 완료기간을 비교한다.
만약, 이전 작업보다 완료기간이 작으면 작업의 갯수를 증가시키고 (31 line)
이전 작업보다 완료기간이 큰 작업이 발견되면 작업 완료기간을 갱신하며 작업의 갯수도 1로 갱신한다. (26 ~29 line)

 

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
#include <string>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
 
vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    queue <int> q;
    
    for (int i = 0; i < progresses.size(); ++i) {
        int cur = progresses[i];
        int time = speeds[i];
        
        int quotient = (100 - cur) / time;
        int remain = (100 - cur) % time;
        
        int release = quotient + (remain == 0 ? 0 : 1);
        q.push(release);
    }
    
    int release = q.front();
    int finish = 0;
    while(!q.empty()) {
        // 앞에 작업 끝난 경우
        if (release < q.front()) {
            release = q.front();
            answer.push_back(finish);
            finish = 1;
        } else {
            finish++;
        }
        q.pop();
    }
    
    answer.push_back(finish);
    return answer;
}
cs

'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글

이분탐색 > 입국심사  (0) 2019.07.19
스택/큐 - 주식가격  (0) 2019.07.05
스택/큐 - 탑  (0) 2019.07.04
스택/큐 - 다리를 지나는 트럭  (0) 2019.07.02
스택/큐 - 프린터  (0) 2019.07.02