문제링크 : 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

번외로 다른사람코드가너무 깔끔해서 가져와보았다

 프로그래머스의 장점은 내가 푼문제는 다른사람의  풀이를 볼수 있는데 그중 추천이 제일 높은게 제일 좋은 코드이다.내생각에 위 코드는 반복문 하나로 문제를 풀었는데 정말 깔끔한 코드 인거 같다.

ariz1623