[C++] 프로그래머스 기능개발
2021. 2. 5.
반응형

programmers.co.kr/learn/courses/30/lessons/42586

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr

 

1. 서론

 

쉬워 보이는데 쉬운 문제 ㅎㅎ 어렵게 생각 말 것.

 

2. 문제 풀이

 

여러 기능들을 개발하는데 각 기능들마다 하루에 할 수 있는 작업량이 다르다. 각 기능에는 순서가 있고, 그 순서대로 완료되는 날 배포한다. 만약 뒤의 기능이 먼저 완료한다고 해도 앞의 기능이 완료되는 날 같이 배포해야 한다. 각 배포 때마다 몇 개의 기능이 배포되는지를 배열로 return 하는 게 문제다.

 

문제에서 각 기능의 완성된 정도와 걸리는 시간을 문제에서 준다. 나는 완성된 정도에 걸리는 시간을 100이 될 때까지 더해줬다. 그리고 더하는 동안에 몇 번을 더해야 100이 되는지 count 해줬다. 그리고 그 count 해준 값을 큐에 넣었다. 그럼 큐에 기능 순서대로 며칠이 걸리는지 쌓이게 된다. 앞의 기능이 완성되어야 뒤를 배포할 수 있다는 것은 선입선출을 의미하므로 편하게 큐를 썼다.

 

그리고 반복문을 돌리며 큐를 pop 하는데 맨 앞의 값은 미리 다른 변수에 저장하고 pop한 후에 뒤의 값들과 비교하며 걸린 날짜가 작거나 같은 경우는 count를 해주다가 맨 앞의 값보다 큰 날이 나타나면 변수에 그 값을 저장하고 답을 저장하는 배열에 넣어준다.

 

문제의 입출력 예로 예시를 들자면

 

95, 90, 99, 99, 80, 99 <-> 1, 1, 1, 1, 1, 1

큐:  5 | 10, 1, 1 | 20, 1

배열: 1 3 2

 

이런 식으로 간단하게 풀 수 있다!!

 

역대급 간결함

 

 

3. 코드 설명

 

#include <queue>
#include <vector>

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    queue<int> check;
    int i, c, t;
    
    for (i = 0; i < progresses.size(); i++)
    {
        c = 0;
        while(progresses[i] < 100)
        {
            progresses[i] += speeds[i];
            c++;
        }
        check.push(c);
    }
    
    
    c = 1;
    t = check.front();
    check.pop();
    while(!check.empty())
    {
        if (t >= check.front()) 
            c++;
        else
        {
            answer.push_back(c);
            c = 1;
            t = check.front();
        }
        check.pop();
    }
    
    answer.push_back(c);
    
    return answer;
}

 

progresses를 한 바퀴 돌면서 안의 반복문을 따로 돌려 전부 작업이 완료되게 해준다.

작업을 완료하게 speeds 배열의 값을 넣어주는 동안에 며칠이 걸리는지 c로 count 한다.

카운트 한 값을 check 큐에 넣는다.

t에는 가장 큰 값이 들어가도록 하는데 초기 값은 맨 앞의 값이다. 맨 앞의 값을 넣어주고 그 값은 pop 한다. 

그리고 큐를 돌면서 큐의 가장 앞의 값이 t보다 작거나 같으면 그 값을 count 하고 아닌 경우에는 답을 적는 answer 배열에 넣어주고 c와 t를  초기화한다.

그리고 마지막에 남은 count 값을 answer 배열에 마저 넣어준다.

 

 

 

 

 

 

반응형
myoskin