728x90
level 2 : 기능 개발
https://programmers.co.kr/learn/courses/30/lessons/42586?language=cpp
코딩테스트 연습 - 기능개발
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는
programmers.co.kr
코드
//프로그래머스 기능 개발
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
vector<int> day;
for (int i = 0; i < progresses.size(); i++) {
int time = 0;
day.push_back((100 - progresses[i]) / speeds[i]); // 작업 걸리는 날
if ((100 - progresses[i]) % speeds[i]) //나머지가 있으면 +1
++day.back(); //가장 뒤 벡터 +1
}
int service = day[0];
int num = 1;
for (int i = 1; i < day.size(); i++ ) {
if (service >= day[i])
num++;
else {
answer.push_back(num);
service = day[i];
num = 1;
}
}
answer.push_back(num);
return answer;
}
int main() {
vector<int> progresses = { 95, 90, 99, 99, 80, 99 };
vector<int> speeds = { 1,1,1,1,1,1 };
solution(progresses, speeds);
return 0;
}
설명
작업 걸리는 날이 며칠인지 구하여 벡터 day에 저장하였다.
작업이 며칠에 끝나는지는 (100 - (완료된 작업%)) / (하루에 작업 가능한 %)이다. 다음 식에서 나머지가 존재한다면 +1 해준다.
여기서 (100 - (완료된 작업%)) / (하루에 작업 가능한 %) 하지 않고 (99 - (완료된 작업%)) / (하루에 작업 가능한 %) +1로 한다면 나머지를 생각하지 않고 작업 일 수 구하는 것이 가능하다.
벡터 day에서 다음 작업이 전 작업일수보다 작다면 같이 배포가 가능하다. 따라서 num을 증가시켜주고 그렇지 않다면 이후에 배포한다.
고찰
++day.back(); // 가장 뒤 벡터 +1
++day.front(); // 가장 앞 벡터 +1
벡터의 다음 함수 back을 사용하여 가장 뒤 벡터의 값을 +1할 수 있고 front함수를 사용하여 가장 앞 벡터 값을 +1 할 수 있다.
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
알고리즘(C++) / 프로그래머스 level 2 : 123 나라의 숫자 (0) | 2021.07.28 |
---|---|
알고리즘(C++) / 프로그래머스 level 2 : 짝지어 제거하기 (0) | 2021.07.26 |
알고리즘(C++) / 프로그래머스 level 2 : 멀쩡한 사각형 (0) | 2021.07.24 |
알고리즘(C++) / 프로그래머스 level 2 : 뉴스 클러스터링 (0) | 2021.07.21 |
알고리즘(C++) / 프로그래머스 level 2 : 조이스틱 (0) | 2021.07.18 |
댓글