문제
programmers.co.kr/learn/courses/30/lessons/42586
코드설명
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
queue<int> time;
int tmp1;
int tmp2;
int ans;
for(int i = 0 ;i < progresses.size();++i)
{
int t = 0;
while(progresses[i] < 100)
{
progresses[i] += speeds[i];
++t;
}
time.push(t);
}
ans = 1;
if(!time.empty())
{
tmp1 = time.front();
time.pop();
}
else
return answer;
while(!time.empty())
{
tmp2 = time.front();
time.pop();
if(tmp1 < tmp2)
{
answer.push_back(ans);
tmp1 = tmp2;
ans = 1;
}
else
ans++;
}
answer.push_back(ans);
return answer;
}
각각의 기능들이 100%에 도달하기까지 걸리는 시간은 자료형이 queue인 time에 저장한다.
더보기
for(int i = 0 ;i < progresses.size();++i)
{
int t = 0;
while(progresses[i] < 100)
{
progresses[i] += speeds[i];
++t;
}
time.push(t);
}
기준이 되는 tmp1과 time의 가장 앞에 있는 tmp2를 비교하였다. tmp1은 자신보다 큰 tmp2를 만나기 전까지 모든 기능들을 동시에 배포할 수 있다. 따라서 tmp1이 tmp2보다 크거나 같은 경우에는 ans만 증가시켜준다. tmp1이 자신보다 큰 tmp2를 만나면 이때까지의 기능들의 개수를 저장한 ans를 answer벡터에 추가시켜주고, 해당 tmp2는 기준이 된다. 따라서 tmp1에 tmp2를 대입시켜주고, ans는 1로 초기화 시켜주었다.
time이 모두 pop되어 while문을 빠져나오면, 마지막으로 저장된 ans는 아직 벡터 answer에 push되지 않았기 때문에 이 값 또한 넣어준다.
더보기
ans = 1;
if(!time.empty())
{
tmp1 = time.front();
time.pop();
}
else
return answer;
while(!time.empty())
{
tmp2 = time.front();
time.pop();
if(tmp1 < tmp2)
{
answer.push_back(ans);
tmp1 = tmp2;
ans = 1;
}
else
ans++;
}
answer.push_back(ans);
반응형
'알고리즘 문제 > C++' 카테고리의 다른 글
[프로그래머스] Level2 : 주식가격 - C++ (0) | 2020.12.27 |
---|---|
[프로그래머스] Level2 : 다리를 지나는 트럭 - C++ (2) | 2020.12.20 |
[프로그래머스] Level2 : 프린터 - C++ (0) | 2020.12.18 |
[백준] 9012번 : 괄호 - C++ (0) | 2020.12.17 |
[프로그래머스] Level2 : 최댓값과 최솟값 - C++ (0) | 2020.07.10 |