Algorithm_프로그래머스
[프로그래머스 c++ O] 기능개발
xhaktmchl
2021. 7. 21. 18:06
728x90
반응형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
#include <string>
#include <vector>
#include <iostream>
using namespace std;
// [프로그래머스 c++ O] 기능개발
// 문제: 기능이 배포되는데 걸리는 시간을 계산하여 한번 배포할 때 몇개의 기능들이 배포되는지 구하라
// 접근: 기본구현-> 배포일 계산 -> 앞 기능 배포일< 뒤기능 배포일 // 앞 기능 배포일> 뒤 기능 배포일 경우 나누어 생각
// 배포일이 5 1 1 6 이면 5,1,1 까지는 5보다 작으므로 함께 배포, 6은 5보다 크므로 따로 배포
// 풀이:
// 배포에 걸리는 일 수 배열 작성
// 각 배포마다 배포되는 기능들의 개수 세기
// 원소 갯수가 1일때 예외처리
// 완전탐색 : 뒤의 기능은 나중에 배포되는 경우 + // 뒤의 기능까지 포함해서 배포되는 경우
// 마지막 남은 일 수가 앞의 배포일 보다 크든 작든 마지막것 추가해줘야 함
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
int maxN=0,idx=0;
vector<int> days;
// 배포에 걸리는 일 수 배열 작성
for(int i=0;i<progresses.size();i++){
if((100 - progresses[i])%speeds[i] == 0){days.push_back((100 - progresses[i])/speeds[i]);}
else {days.push_back((100 - progresses[i])/speeds[i]+1); }
cout<<days[i]<<'\n';
}
// 각 배포마다 배포되는 기능들의 개수 세기
maxN = days[0]; //제일 앞에 배포되는 기능의 배포일 수
int c=1;
if(days.size() == 1){answer.push_back(c);} // 원소 갯수가 1일때 예외처리
for(int i=1;i<days.size();i++){
// 뒤의 기능은 나중에 배포되는 경우
if(days[i] > maxN){
maxN = days[i];
answer.push_back(c);
c=1;
continue;
}// 뒤의 기능까지 포함해서 배포되는 경우
else {
c++;
}
}
answer.push_back(c); // 마지막 남은 일 수가 앞의 배포일 보다 크든 작든 마지막것 추가해줘야 함
return answer;
}
|
cs |
반응형