본문 바로가기
Developer/C, C++

[C++] 프로그래머스 - 기능개발 (스택/큐)

by Doony 2022. 1. 1.

프로그래머스 기능개발 문제입니다. 딱히 스택 큐의 기능을 썼다보기다는.. 단순히 벡터 어레이를 어떻게 처리하는지에 초점을 맞췄습니다.


문제 정의



접근방법

  • 각각의 작업들이 며칠내에 완료가 되는지에 대한 벡터를 구합니다.
  • 첫 작업보다 빨리 완료되는 작업이 뒤에 나오는지를 확인해서, 카운터에 더합니다.
  • 만약 첫 작업보다 늦게 완료되는 작업이 나오면, 카운터를 answer 벡터에 push_back합니다.

코드


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
#include <string>
#include <vector>
#include <iostream>
 
using namespace std;
 
vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    
    vector<int> v;
    for (int i=0; i<progresses.size(); i++) {
        int days = (100-progresses[i])/speeds[i];
        int remaining = (100-progresses[i]) % speeds[i];
        // 나머지가 있으면 하루 더 걸리는 것!
        if (remaining > 0) {
            v.push_back(days+1);
        } else {
            // 딱 떨어져서 나누어지는 경우!
            v.push_back(days);
        }
        
    }
    // v shows how many days left. (ex. [5, 10, 1, 1, 20, 1])
 
    int prev = v[0];
    int cnt = 0;
    for (int i=0; i < v.size(); i++) {
        if (v[i] <= prev) {
            cnt++;
        } else {
            answer.push_back(cnt);
            cnt = 1;
            prev = v[i];
        }
        if (i == v.size()-1) {
            answer.push_back(cnt);
        }
    }
 
    return answer;
}
cs

댓글