문제링크 : https://programmers.co.kr/learn/courses/30/lessons/42586
문제설명
문제는 기능을 업데이트 하여 배포 하는데 앞에 기능이 개발 완료 가 되야 배포가 가능하다 그래서 한번에 배포가능한 갯수를 return 하는 것이다.
입력은 현재 작업진도 와 작업속도가 vector로 주어지고
출력은 한번에 배포가능한 갯수를 return .
알고리즘
1. 각 기능에대한 소요시간을 따로 구한뒤 첫번째기능부터 마지막기능까지 살펴봄
2. 살펴볼때 일단 high 값을 첫번째 소요 시간으로 잡고 두번째 부터 high 보다 작거나 같으면 cnt ++;
3. 그러다가 소요시간이 high 보다 높다 -> high 갱신및 cnt 값 을 answer 에 push_back
코드
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
|
#include<string>
#include<vector>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
vector<int> complete;
for (int i = 0; i < progresses.size(); i++) {
//몇일 후 완료되는지
int day = (100 - progresses[i]) % speeds[i];
//딱 맞아 떨어질때
if (day == 0) complete.push_back((100 - progresses[i]) / speeds[i]);
//나머지가 발생할때는 +1
else
complete.push_back((100 - progresses[i]) / speeds[i] + 1);
}
int high = complete[0];
int cnt = 1;
for (int i = 1; i < progresses.size(); i++) {
//첫째날 기능보다 먼저 개발된경우
if (high >= complete[i]) {
cnt++;
//마지막기능인경우 답에 푸쉬
if (i == progresses.size() - 1)answer.push_back(cnt);
}
else {
answer.push_back(cnt);
//날짜갱신
high = complete[i];
cnt = 1;
//마지막기능인경우 답에 푸쉬
if (i == progresses.size() - 1)answer.push_back(cnt);
}
}
return answer;
}
|
cs |
번외로 다른사람코드가너무 깔끔해서 가져와보았다
프로그래머스의 장점은 내가 푼문제는 다른사람의 풀이를 볼수 있는데 그중 추천이 제일 높은게 제일 좋은 코드이다.내생각에 위 코드는 반복문 하나로 문제를 풀었는데 정말 깔끔한 코드 인거 같다.
'c++ > 프로그래머스' 카테고리의 다른 글
프로그래머스 : 타겟넘버 (0) | 2020.04.01 |
---|---|
프로그래머스 : k번째수 (0) | 2020.03.27 |
프로그래머스 : 전화 번호 목록 (0) | 2020.03.27 |
프로그래머스 : 모의고사 (0) | 2020.03.27 |
프로그래머스 : 완주하지 못한 선수 (0) | 2020.03.27 |