본문 바로가기

알고리즘/프로그래머스

기능개발

반응형




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
#include <string>
#include <vector>
 
using namespace std;
 
vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    vector<int> temp;
    
    for(int i = 0; i < progresses.size(); i++) {
        int last = 100 - progresses[i];
        if(last % speeds[i] != 0) temp.push_back(last / speeds[i] + 1);
        else temp.push_back(last / speeds[i]);
    }
    
    int max = temp[0];
    int count = 0;
    
    for(int i = 0; i < temp.size(); i++) {
        if(max < temp[i]) {
            max = temp[i];
            answer.push_back(count);
            count = 1;
        } else {
            count++;
        }
    }
    answer.push_back(count);
    return answer;
}
cs

문제를 먼저 이해해보자.

처음에 주어지는 것은 얼마나 완성되었는지 퍼센트를 보여준다. 그리고 그 다음에 주어지는 것은 일의 진척 속도이다. 일의 진척 속도란 현재 일이 얼마나 남았느냐에 따라서 완성일수를 결정짓는 요소이다. 예를들어서 완성된 정도가 예시에 나온것처럼 93, 일의 진척속도가 1이면 현재 일이 남아있는 정도는 7이다. 여기서 일의 진척속도가 1이므로 7일이 후에 일을 완성짓게 된다. 7일후면 일의 진척정도가 100이되기 때문이다.


이것을 바탕으로 문제를 어떻게 풀어야할지를 구상하면 된다. 먼저 문제의 답을 반환할 vector answer를 선언하고 그 이후에 temp를 선언했다. temp를 선언한 이유는 남은 정도에 따라서 그 일이 얼마나 걸릴지 결정하기 위함이다. 변수 이름을 좀 더 좋은 것을 선언했으면 좋았겠지만 당시에는 어떤 이름을 지어줘야할지 생각이 나지 않았다. 어쨌든, 처음 반복문에서 하는 일은 temp에 현재 일이 얼마나 남았는지에 대해 저장을 하는 것이다. 여기서 조건문을 보면 일의 진척속도로 나눈 것이 0이나 아니냐에 따라서 1일을 더해주고 아니고의 차이가 발생한다. 그 이유는 남은 정도를 진척속도로 나눴을 때 나머지가 발생하면 몇시간이라도 더 수행하는 것이기 때문에 그것을 1일으로 더해줘야하기 때문이다.


위에서 남은 일수를 바탕으로 밑에서는 최대값을 먼저 구해준다. 그 이유는 최대값이 바뀌는 그 순간이 동시에 배포되는 수의 종료를 뜻하기 때문이다. 예를들어, 처음에 개발한 것이 7일만에 끝나고 두번째에 개발한 것이 3일만에 끝난다고 치면 개발은 3일만에 끝나는 것이 먼저 끝났지만 배포는 처음에 개발한 7일만에 끝나는 것에 맞춰서 배포가 같이 된다. 하지만 7일, 3일, 9일만에 끝나는 일이 있다고 한다면 7일만에 끝나는 제품이 2개, 9일만에 끝나는 제품이 1개가 된다.


이것을 반영하여 구현한것이 두번째 반복문이다. 처음에 max값을 맨앞에 나오는 일수로 할당을 시켜준 후, temp에 저장된 일수를 차례대로 비교를 한다. 이때 max값과 temp에 저장된 일수를 비교해서 max값이 크면 count를 증가시켜 동시에 끝나는 제품의 개수를 카운트해준다. max값이 특정 일수보다 작다면 answer에 지금까지 증가된 카운트값을 push해주고 카운트값을 1로 초기화해준다. 또한 max값을 그때의 일수로 바꿔준다.


마지막 answer에 count를 push해준 이유는 이런 식으로 반복문을 수행하면 마지막에 해당하는 카운트 값이 반복문에서 answer에 저장이되지 않기 때문이다.

'알고리즘 > 프로그래머스' 카테고리의 다른 글

프린터  (0) 2018.10.24
H-Index  (0) 2018.10.24
쇠막대기  (0) 2018.10.22
모의고사  (0) 2018.10.14
완주하지 못한 선수  (0) 2018.10.13