문제 풀이
#include <string>
#include <vector>
#include <queue>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
queue <int> pr, sp;
// queue를 만들어 값을 넣는다.
for (int i = 0; i < progresses.size(); i++) {
pr.push(progresses[i]);
sp.push(speeds[i]);
}
// 진도의 증가를 day로 표현한다. 곱셈을 사용하기 때문에 초기값은 1.
int day = 1;
// 큐가 빌 때까지
while (!pr.empty()) {
//완료된 작업의 개수
int finished = 0;
for (int j = 0; j < pr.size(); j++) {
// 하단 설명 참조
if ((pr.front() +( sp.front() * day)) >= 100) {
finished++;
pr.pop();
sp.pop();
}
}
// 작업이 완료된 것이 있다면 해당 작업들을 answer에 추가
if (finished != 0)
answer.push_back(finished);
// 진도 증가
day++;
}
return answer;
}
pr과 sp는 queue이기 때문에 가장 앞의 값이 빠지지 않는다면 다음 값들은 삭제가 불가능하다. 이러한 특성을 이용하여 pr.front()의 값과 sp.front()*day 의 값의 합이 100이 넘게 된다면 finished를 추가하는 방식을 사용한다. 이렇게 한다면 front의 다음 값들이 front보다 먼저 100 이상이 된다고 하더라도 pop이 되지 않기 때문에 front가 완료된다면 이후의 100 이상이 된 값은 for문을 통해 모두 pop이 될 수 있다.
문제 링크
programmers.co.kr/learn/courses/30/lessons/42586?language=cpp
'C++ > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [C++] 프린터 (0) | 2020.11.27 |
---|---|
[프로그래머스] [C++] 다리를 지나는 트럭 (0) | 2020.11.26 |
[프로그래머스] [C++] 주식가격 (0) | 2020.11.19 |
[프로그래머스] [C++] 베스트앨범 (0) | 2020.11.19 |
[프로그래머스] [C++] 위장 (0) | 2020.11.19 |