오답노트

프로그래머스 2단계 - 기능 개발 본문

C,C++/코딩테스트

프로그래머스 2단계 - 기능 개발

권멋져 2022. 6. 5. 20:53
https://programmers.co.kr/learn/courses/30/lessons/42586#
 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr

- 문제 파악

현재 각 기능별로 진행도를 나타내는 배열과 각 기능별 하루마다 진행할 수 있는 진행도 배열이 주어진다.

배포는 배열의 순서대로 되어야하며 앞에 요소가 개발되지 않았다면 (진행도가 100이 아니면) 뒤에 요소들은 배포할 수 없다. 같은 날에 진행도가 100된 기능이 여러 개라면 해당 기능들은 모두 배포할 수 있다. 이 때 배포될 때 마다 몇개가 배포될 수 있는지 배열로 출력하라.

 

- 정답

현재 진행도에서 100이 되기 위해 필요한 최소 일 수를 구한 뒤 큐에 넣어놓는다.

그 후 큐를 하나씩 꺼내보면서 그 뒤에있는 큐의 최소 일 수가 꺼낸 큐의 최소 일 수 보다 작거나 같으면 그 다음 큐도 확인 하는 방식으로 로직을 구성했다.

#include "bits/stdc++.h"

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++)
    {
        float mincnt = ((100 - (float)progresses[i]) / (float)speeds[i]);
        int tmp = (int)ceil(mincnt);
        q.push(tmp);
    }
    

    while(!q.empty())
    {
        int nCnt = 1;
        int tmp = q.front();
        q.pop();
               
        while(!q.empty())
        {
            if(q.front() <= tmp)
            {
                tmp = max(tmp,q.front()) ;
                nCnt++;
                q.pop();
            }
            else
                break;
        }
        
        answer.push_back(nCnt);
               
    }
    

    
    return answer;
}