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

문제

제한 사항

입출력

문제 접근

큐를 사용해서 구현한 문제이다.
현재 progresses와 speeds를 사용해, 총 걸리는 시간을 계산하여 큐에 넣는다. 만약 progresses[i]/speeds[i]가 딱 나누어 떨어진다면, 그 날을 바로 큐에 넣고, 아니라면 1을 더해서 넣는다.

큐의 fifo 개념을 사용하여, 먼저들어온, 값들을 먼저 내보내는 것을 1차 기준으로 하고, 뒤에 값이 현재 자기보다 작은 거라면, 계속 뽑고, 자기보다 큰 것이 나온다면, 뽑는 것을 멈추고 다시 while문을 돌아가서 시작하면 된다.

코드 구현(c++)

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

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    int taskSize = progresses.size();
    queue<int> q;
    vector<int> answer;
    for(int i = 0 ; i < taskSize ; i++){
        int days = (100-progresses[i])/speeds[i];
        if((100-progresses[i])%speeds[i] != 0){
            days += 1;
        }
        q.push(days);
    }
    while(1){
        if(q.empty()) break;
        int cnt = 0;
        int firstNum = q.front();
        int tempNum;
        q.pop();
        cnt++;
        while(1){
            if(q.empty()) break;
            tempNum = q.front();
            if(tempNum > firstNum) break;
            q.pop();
            cnt++;
        }
        answer.push_back(cnt);
    }
    
    return answer;
}
profile
https://peace-log.tistory.com 로 이사 중

0개의 댓글

Powered by GraphCDN, the GraphQL CDN