코딩테스트/프로그래머스
[프로그래머스 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 );