반응형
https://programmers.co.kr/learn/courses/30/lessons/42586
[ 코드 ]
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
vector<int> proR;
vector<int> speedR;
vector<int> cnt;
int count = 0;
for (int i=0; i < progresses.size(); i++) {
proR.push_back(progresses[progresses.size()-i -1]);
speedR.push_back(speeds[speeds.size()-i-1]);
}
//이게 있어야 배열을 반대 순서로 넣어준 다음 pop_back()을 할 수 있음.
//vector는 push_back(), pop_back()만 있는 배열과 비슷한 구조이기 때문.
while(proR.size() > 0) {
for (int i = 0; i < progresses.size(); i++) {
proR[i] = proR[i] + speedR[i];
}
while(proR.back()>= 100){
if (proR.back() >= 100) {
proR.pop_back();
speedR.pop_back();
count++;
}
}
cnt.push_back(count);
count = 0;
}
for (int i = 0; i < cnt.size(); i++) {
if (cnt[i] !=0 ) {
answer.push_back(cnt[i]);
}
}
return answer;
}
proR은 progresses 벡터의 reverse
speedR은 speeds 벡터의 reverse
queue처럼 FIFO가 되어야하는데,
vector에서는 배열과 같이 뒷쪽에서 push_back()과 pop_back() 기능만 있기 때문에 배열에 반대로 넣어주고
두번째 오는 while문에서도 back()부터 체크하였다.
[ 다른 사람의 풀이 ]
#include <string>
#include <vector>
#include <iostream>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
int day;
int max_day = 0;
for (int i = 0; i < progresses.size(); ++i)
{
day = (99 - progresses[i]) / speeds[i] + 1;
if (answer.empty() || max_day < day)
answer.push_back(1);
else
++answer.back();
if (max_day < day)
max_day = day;
}
return answer;
}
하루 작업량 부분을
day = (99 - progresses[i]) / speeds[i] + 1;
라는 한 줄로 끝낸 게 충격적이었다.
수학 알고리즘 문제를 더 연습하자.
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 위장 / java (0) | 2021.07.01 |
---|---|
[프로그래머스] H-Index / java (0) | 2021.06.14 |
[프로그래머스] 여행경로 / java (0) | 2021.06.13 |
[프로그래머스] 멀쩡한 사각형 / c++ (0) | 2020.05.28 |
[프로그래머스] 프린터 / c++ (0) | 2020.05.23 |