cosmohoo 2021. 9. 5. 22:00
반응형

문제설명

 

 

 

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    int last = progresses.size(); //3개 원소면 3리턴
    int end = last;
    int cnt =0; 
    int start =0;
    while(end > 0)
    {
    for(int i=0; i<last; i++)
        {
            if(progresses[i] <=100)
            {
                 progresses[i] += speeds[i];
            }   
            if( i == (last -1))
            {
                for(int j=start; j< last; j++) //이전것까지 확인
                {
                    if(progresses[j] >= 100) //다 되었으면
                    {
                        cnt++;
                    }
                    else
                    {
                        start = j; break;
                    }//다음것이 초과하지 못하였으면 해당것만 넣고 끝
                }
                if(cnt >0)
                {
                answer.push_back(cnt);
                end -=cnt;
                cnt=0;
                }
            }
        }
    }
    return answer;
}

 

 

=> progresses 배열에 speeds 배열의 수를 차례대로 더해 100이 넘는 배열을 찾습니다. 

 

=> progresses 배열에 100이 넘은 배열이 있을 경우, 앞에서부터 차례로 answer배열에 삽입합니다. 

 

=> progresse배열 뒷부분에 100이 넘은 원소가 있더라도 앞부분에서 100을 넘지 못하였을 경우에는 answer에 삽입하지 않습니다. 

 

=> 해당 과정을 answer 배열 원소 수와 progresses 배열 원소수와 같아질 때까지 반복합니다. 

 

 

*스택과 힙을 이용해 풀수풀 수 있는 문제라고는 하나, 제한된 수의 크기가 크지 않아 사용하지 않고 풀 수 있는 문제였습니다. 

 

 

반응형