본문 바로가기
[프로그래머스]

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

by Hevton 2023. 8. 17.
반응형

 

주의할 점은

나눴을 때 2.44 이런 값이 나오면 3일이 걸리도록 처리해야한다는 점이다.

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

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    queue<int> que;
    
    int len = progresses.size();
    int days = 0;
    
    for(int i = 0; i < len; i++) {
        days = ceil((100.0f - progresses[i]) / speeds[i]);
        que.push(days);
    }
    
    int max = que.front();
    int counter = 0;
    
    while(!que.empty()) {
                
        if(max >= que.front()) {
            counter++;
        } else {
            answer.push_back(counter);
            max = que.front();
            counter = 1;
        }

        que.pop();
    }
    
    answer.push_back(counter); // 마지막 처리
    
    return answer;
}

 

 

솔직히 스스로의 코드가 너무 지저분하다고 생각되어서, 다른 분은 어떻게 짰나 하고 봤는데 감탄했다.

그 분의 풀이를 토대로 내 코드를 재구성했다.

#include <string>
#include <vector>
#include <cmath>

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    
    int len = progresses.size();
    
    int max = 0;
    for(int i = 0; i < len; i++) {
        
        int days = ceil((100.0f - progresses[i]) / speeds[i]);
        
        
        if(days > max) {
            answer.push_back(1);
        } else {
            answer.back()++;
        }
        
        if(max < days)
            max = days;
        
    }
    
    return answer;
}

answer.back()++ 를 활용하는게 관건이었다.

반응형