문제 출처: https://programmers.co.kr/learn/courses/30/lessons/42586
Lv2
이건 분류부터 스택/큐에 들어가있길래 그냥 단박에 queue를 이용해야하는구나! 힌트를 얻을 수 있었다.
만약 저 분류만 아니였으면 vector에 해결했을 것 같다.
- 하루에 몇 % 씩해서 남은 작업량이 며칠만에 끝내는지 계산한다.
- 계산한대로 겹치는 일수에 몇개의 작업량을 끝낼 수 있는지 answer 벡터에 넣는다.
추가한 라이브러리
queue
#include <string>
#include <vector>
#include <queue>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
queue<int> q;
for(int i=0; i<progresses.size(); i++){
int res = 100-progresses[i];
if (res % speeds[i] != 0) res += speeds[i];
q.push(res/speeds[i]);
}
int day = q.front();
int cnt=0;
while(!q.empty()){
if(day < q.front()){
answer.push_back(cnt);
day = q.front();
cnt=0;
}else{
cnt++;
q.pop();
}
}
if(cnt !=0) answer.push_back(cnt);
return answer;
}
이러면 안되는데 while 부분에서 고민을 했다. 습관적으로 while안에서 q.front(), q.pop()
을 썼기 때문인지 안에서 처리하려고 고민했다.
그러다 그럴필요없이 밖에서 처리하고 들어가도 된다 생각했고 위와 같은 코드가 나왔다.
그리고 다른 사람 코드 봤는데 for문 하나로 끝낸게 대박이였다 그것도 queue는 안쓰고 vector만으로 처리했다.
++answer.back()
이란 코드를 사용했다. 먼저 1이란 숫자를 두고 그 다음 progress가 작으면 back으로 둔 값을 ++해주는 논리였다.
이것도 참고해서 다른 코드에서 써봐도 좋을듯하다.