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

📝문제 포인트

  1. progresses 벡터의 원소별로 100에서 빼면 얼마가 남는지,
    그걸 speeds로 나누면 어떻게 되는지 계산한다.
    -> 나누어 떨어지면 몫을 push, 나눠떨어지지 않는 경우 +1을 해준다.
    ex) [93, 30, 55] 인 경우 100에서 빼면 [7, 70, 45]이 되고, 각각의 speeds([1, 30, 5])로 나누게 되면 70인 경우 나눠떨어지지 않음.
    하루에 30씩 진전되니까 하루를 더 해야 일을 마무리 할 수 있으므로 1을 더해준다.

  2. 1번을 통해([93, 30, 55]) 계산해주면 [7,3,9]가 된다.
    -같거나 작으면 갯수를 증가시켜줌
    -큰 경우 세고 있던 걸 answer에 넣어주고 새롭게 초기화한다


✍코드

#include <string>
#include <vector>
#include <queue>

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    queue<int> success;
    for(int i=0;i<progresses.size();i++){
        int cnt=100-progresses[i];
        if(cnt%speeds[i]==0) success.push(cnt/speeds[i]);
        else success.push(cnt/speeds[i]+1);
    }
    
    int front = success.front();
    int cnt=0;
    while(!success.empty()){
        if(front>=success.front()){
            cnt++;
            success.pop();
        }else{
            front=success.front();
            answer.push_back(cnt);
            cnt=1;
            success.pop();
        }
    }
    answer.push_back(cnt);
    return answer;
}

https://programmers.co.kr/learn/courses/30/lessons/42586

좋은 웹페이지 즐겨찾기