본문 바로가기

알고리즘/프로그래머스

[프로그래머스-코딩테스트 고득점Kit] 기능개발

Lv2. 스택 카테고리의 문제입니다.

처음 풀었을 때, 작업 진도와 진행 속도를 integer 형으로 사용하여 fail이 발생하였습니다.

integer를 integer로 나눈 결과값은 소수점 아래가 버려지기 때문에, 나누어 떨어질 때와 나누어 떨어지지 않을 때가 working day가 다르게 나오기 때문입니다.

따라서 남은 작업 진도와 진행 속도를 double 형으로 변환하여 나눈 결과값을 올림하여 working day를 구했습니다.

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

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    int preWorkingDay = ceil((double)(100 - progresses[0])/(double)speeds[0]);
    int count = 1;
    
    for(int i=1; i < progresses.size(); i++)
    {  
        int workingDay = ceil((double)(100 - progresses[i])/(double)speeds[i]);
        
        if(preWorkingDay >= workingDay)
        {
            count++;
        }
        else
        {
            answer.push_back(count);
            preWorkingDay = workingDay;
            count = 1;
        }
    }
    
    answer.push_back(count);
    
    return answer;
}