문제 개발
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
progresses와 speeds벡터는 사이즈가 같으므로
progresses의 크기만큼 순회하면 두 벡터가 같이 순회된다.
for(int i=0;i<progresses.size();i++){
변수로는
int curLeftProgress=0,curWorkProgress=0,prevWorkProgress=0,curWorkDone=0;
이렇게 선언을 해줬고
각각,
작동 방식은 처음 반복문일 때는(i=0)
prevWorkProgress에 첫번째 진도가 걸리는 시간을 저장한다.
그리고 curWorkDone을 1로 설정한다.
curLeftProgress=100-progresses[i];
prevWorkProgress= ceil((float)curLeftProgress/speeds[i]);
curWorkDone=1;
그 다음 순회부터,
현재 진도가 걸리는 시간을 구한 후,
이전 시간보다 적게 걸린다면 curWorkDone값만 +1해주고 패스하고,
이전 시간보다 많이 걸리면 현재 저장된 curWorkDone값 벡터에 푸시해주고,
prevWorkProgress에 현재 작업 걸리는 시간 저장한다.
for(int i=0;i<progresses.size();i++){
if(i!=0){
curLeftProgress=100-progresses[i];
curWorkProgress= ceil((float)curLeftProgress/speeds[i]);
if(prevWorkProgress>=curWorkProgress){
curWorkDone++;
}
else{
answer.push_back(curWorkDone);
prevWorkProgress=curWorkProgress;
curWorkDone=1;
}
모든 반복문이 끝난 후, 맨 마지막 값은 처리가 안되었으므로
answer.push_back(curWorkDone);
push해줘야한다.
#include <string>
#include <vector>
#include <cmath>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
int curLeftProgress=0,curWorkProgress=0,prevWorkProgress=0,curWorkDone=0;
for(int i=0;i<progresses.size();i++){
if(i!=0){
curLeftProgress=100-progresses[i];
curWorkProgress= ceil((float)curLeftProgress/speeds[i]);
if(prevWorkProgress>=curWorkProgress){
curWorkDone++;
}
else{
answer.push_back(curWorkDone);
prevWorkProgress=curWorkProgress;
curWorkDone=1;
}
}
else
{
curLeftProgress=100-progresses[i];
prevWorkProgress= ceil((float)curLeftProgress/speeds[i]);
curWorkDone=1;
}
}
answer.push_back(curWorkDone);
return answer;
}
테스트케이스 11번에서 계속 틀려서 이해가 안 가서 찾아봤다.
알고보니 ceil함수 내부에 사용되는 두 변수가 둘다
int값이라서 소수점이 제거된 후, ceil함수가 작동을 해서 의미가 없었던 코드였다.
따라서 분자값을 float으로 형변환을 해준 후 ceil함수의 반환값을
int 변수에 넣음으로 해결하였다..