코딩테스트/프로그래머스

[프로그래머스 C++] 42586. 기능개발

tkxx_ls 2024. 5. 13. 08:55

문제 링크


 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

접근 방법


현재 기능개발에 걸린 시간이 과거에 걸렸던 기능개발 시간보다 큰지 작은지 비교해줍니다.

소스 코드


#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds)
{
    vector<int> answer(1, 0);
    int day, pastDay = (99 - progresses[0]) / speeds[0] + 1;;
    
    for (int i = 0; i < (int)progresses.size(); ++i)
    {
        day = (99 - progresses[i]) / speeds[i] + 1;

        if (pastDay < day)
        {
            answer.emplace_back(1);
            pastDay = day;
        }
            
        else
            ++answer.back();
    }

    return answer;
}

코드 설명


현재 기능 개발에 걸린 시간이 앞에 있던 기능개발에 걸렸던 시간보다 작으면

앞에 있는 기능을 개발 완료한 시점에 이미 뒤에 있던 기능은 개발 완료 되었던 것이므로

++answer.back() 합니다.

 

현재 기능 개발에 걸린 시간이 더 걸렸다면, 이전 기능들은 배포를 이미했고

현재 기능부터 배포해야하므로 emplace_back을 합니다. 또한 pastDay를 갱신합니다.

 

기능 개발에 걸린 시간을 다음과 같이 계산한 이유는 작업속도를 남은 퍼센트로 나누었을때,

나머지가 있다면 1을 더해줘야 하므로 그 계산을 한번에 하기 위해 저렇게 계산했습니다.

처음에는 저도 밑에 코드처럼 계산했습니다.

day = (100 - progresses[i]) / speeds[i] + (((100 - progresses[i]) % speeds[i]) ? 1 : 0 );