[알고리즘 + 자료구조]/[프로그래머스]
프로그래머스 기능개발 C++
Hevton
2023. 8. 17. 17:34
반응형
주의할 점은
나눴을 때 2.44 이런 값이 나오면 3일이 걸리도록 처리해야한다는 점이다.
#include <string>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
queue<int> que;
int len = progresses.size();
int days = 0;
for(int i = 0; i < len; i++) {
days = ceil((100.0f - progresses[i]) / speeds[i]);
que.push(days);
}
int max = que.front();
int counter = 0;
while(!que.empty()) {
if(max >= que.front()) {
counter++;
} else {
answer.push_back(counter);
max = que.front();
counter = 1;
}
que.pop();
}
answer.push_back(counter); // 마지막 처리
return answer;
}
솔직히 스스로의 코드가 너무 지저분하다고 생각되어서, 다른 분은 어떻게 짰나 하고 봤는데 감탄했다.
그 분의 풀이를 토대로 내 코드를 재구성했다.
#include <string>
#include <vector>
#include <cmath>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
int len = progresses.size();
int max = 0;
for(int i = 0; i < len; i++) {
int days = ceil((100.0f - progresses[i]) / speeds[i]);
if(days > max) {
answer.push_back(1);
} else {
answer.back()++;
}
if(max < days)
max = days;
}
return answer;
}
answer.back()++ 를 활용하는게 관건이었다.
반응형