< 문제링크 >
https://www.welcomekakao.com/learn/courses/30/lessons/42586
< 풀이 >
1. 남은 시간을 계산하여 배열로 만든다.
2. 현재 인덱스를 기준으로 현재 남은 시간이하인 연속된 항목들은 한 묶음으로 볼 수 있다.
ex) 남은 시간이 [7, 3, 6, 2, 9, 5] 인 경우, 0번 인덱스를 기준으로 {7, 3, 6, 2}이 한묶음이 된다.
3. 한 묶음을 구성하였을 때, 그 항목의 수가 답이 되므로 answer에 추가한다.
ex) 위의 예시의 경우 4를 추가한다.
4. 한 묶음이 구성된 이후 인덱스가 다음 기준 인덱스가 된다.
ex) 위의 예시의 경우 4가 다음 인덱스이다.
5. 모든 항목을 다 처리할 때 까지 묶음을 계속해서 만들고 처리한다.
-> 이 때, 항목이 끝났으나 묶음처리가 끝나지 않을 수 있으므로 마지막 항목처리 후에는 묶음처리를 해주어야 한다.
< 코드 >
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
vector<int> rest;
// 남은 시간 배열 형성
for (int i = 0; i < speeds.size(); i++) {
rest.push_back(ceil((100 - progresses[i]) / (double)speeds[i]));
}
// 기준 남은 시간보다 더 많은 남은 시간이 나올 때 까지 카운트 증가
int start = rest[0], count = 0;
for (int i = 0; i < rest.size(); i++) {
// 기준 남은시간보다 더 남은시간이 큰 값이 나오면 묶음 처리
if (start < rest[i]) {
answer.push_back(count);
count = 0;
start = rest[i];
}
count++;
// 모든 항목에 대해 처리가 완료된 경우
if (i == rest.size() - 1) {
answer.push_back(count);
}
}
return answer;
}
int main(void)
{
vector<int> progresses = { 93, 30, 55 };
vector<int> speeds = { 1,30,5 };
vector<int> answer = solution(progresses, speeds);
for (vector<int>::iterator iter = answer.begin(); iter != answer.end(); iter++) {
cout << *iter << " ";
}
}
'알고리즘 > Programmers' 카테고리의 다른 글
Programmers / Stack, Queue / 프린터 (0) | 2020.09.06 |
---|---|
Programmers / Stack, Queue / 다리를 지나는 트럭 (0) | 2020.09.06 |
Programmers / Stack, Queue / 주식가격 (0) | 2020.09.06 |
Programmers / hash / 완주하지 못한 선수 (0) | 2020.09.06 |
Programmers / hash / 전화번호 목록 (0) | 2020.09.06 |