728x90
programmers.co.kr/learn/courses/30/lessons/42586
1) 주석 없는 version
#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 dayCount=0;
while(progresses[i]<100)
{
progresses[i]+=speeds[i];
dayCount++;
}
q.push(dayCount);
}
int cnt=1;
int curr=q.front();
q.pop();
while(!q.empty()){
if(q.front()<=curr)
{
q.pop();
cnt++;
}
else{
answer.push_back(cnt);
cnt=1;
curr=q.front();
q.pop();
}
}
answer.push_back(cnt);
return answer;
}
2) 주석 있는 version
#include <string>
#include <vector>
#include <queue> // queue 추가
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
queue<int> q; // queue를 앞으로 q로 사용
for(int i=0;i<progresses.size();i++) //progresses.size() 까지 i를 1씩 증가
{
int dayCount=0; // 한 작업이 완료될 때까지의 날짜를 저장할 변수 선언
while(progresses[i]<100) // 100이 될때까지 반복
{
progresses[i]+=speeds[i]; // 하루에 speeds 만큼 증가하므로 작업 진도에 작업 속도 더해줌
dayCount++; // 날짜 하루 증가
}
q.push(dayCount); // 한 작업이 완료될 때까지의 날짜를 q에 넣어주기
}
int cnt=1; // 배포될 작업 수 저장할 변수 선언
int curr=q.front(); // queue의 첫번째 작업을 curr 변수에 저장
q.pop(); // curr 뽑아내기
while(!q.empty()){ // queue가 비어있지 않을 때까지
if(q.front()<=curr) // queue의 첫번째 작업이 curr 보다 작을 경우
{
q.pop(); // 작업을 뽑아내면서
cnt++; // 배포할 작업 수 1 증가
}
else{ // queue의 첫번째 작업이 curr 보다 작지 않은 경우
answer.push_back(cnt); // vector 제일 뒤에 cnt값 넣기
cnt=1; // 배포할 작업의 수는 1
curr=q.front(); // 첫번째 작업은 curr
q.pop(); // curr 뽑아내기
}
}
answer.push_back(cnt); // vector 제일 뒤에 cnt값 넣기
return answer;
}
'프로그래머스' 카테고리의 다른 글
프로그래머스(두 개 뽑아서 더하기)풀이 C++ (0) | 2020.12.11 |
---|---|
프로그래머스(두 개 뽑아서 더하기)풀이 C++ (0) | 2020.12.11 |
프로그래머스(완주하지 못한 선수)풀이 C++ (0) | 2020.11.09 |
프로그래머스(다리를 지나는 트럭)풀이 C++ (0) | 2020.11.02 |
프로그래머스(주식가격) 풀이 C++ (0) | 2020.11.02 |