이것도 알아야 하네?

[C++] Programmers 기능개발 풀이 (stack/queue) 본문

프로그래밍/알고리즘

[C++] Programmers 기능개발 풀이 (stack/queue)

아직 갈 길이 먼 사람 2021. 11. 10. 23:11
728x90

풀이

progresses에 speed를 더해서 하루하루 지난다고 생각하고 그 당일 날 새 100이 넘은 얘들까지 수를 세아려 answer에 넣어줍니다. 주의할 점은 지난 배포에 포함한 부분까지를 표시해주어서, 100이 넘는 일들 중 지난 배포까지 포함된 부분을 빼줘야지만 이번에 새로 100이 넘는 부분만 남는다는 것입니다. 저는 이렇게 풀었지만 많은 분들이 day = (99 - progresses[i]) / speeds[i] + 1; 로 해당 progesses가 100이 넘는 기간을 미리 구해서 문제를 풀었더라구요, 저도 객관적으로 보면 그 부분이 for문을 돌지 않고 빨리 구하는 방법이라고 생각합니다 :-)

전체 성공 코드

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    vector<int> flag(progresses.size(), 0);
    int cur = 0; 
             
    while (1) {
        int index = 0;
        for (int i = 0; i < progresses.size(); i++) {
            progresses[i] += speeds[i];
        }
        
        int i;
        for (i = 0; i < progresses.size(); i++) {
            if (progresses[i] < 100) break;
        }
        index = i - cur;
        
        if (index != 0 ) {
            answer.push_back(index);
            cur = i;
        }
        
        if (cur == progresses.size()) {
            break;
        }
    }
    return answer;
}
728x90
Comments