728x90
1. 문제 설명
2. 풀이 과정
- 문제 해결의 흐름
- 기능 순서대로 개발함을 인지하자.
- progresses 배열을 순회하며 기능개발에 걸리는 시간(days)을 구하자.
- days가 큐에 저장된 이전 값보다 크다면 이전 작업의 개발에 현재 작업이 포함되지 않기에 끊어주어야 한다.
- 작거나 같다면 현재 작업이 이전 작업에 포함되기에 끊어주지 않아도 된다.
- 코드
#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 days = (100 - progresses[i] + speeds[i] - 1) / speeds[i];
if (!q.empty() && q.front() < days) {
answer.push_back(q.size());
while (!q.empty()) {
q.pop();
}
}
q.push(days);
}
answer.push_back(q.size());
return answer;
}
3. 후기
관심 있는 부분이 days가 가장 큰 q.front() 값임이 파악되면 쉽게 풀린다!
'Algorithm > data_structure' 카테고리의 다른 글
[큐/스택] 기본 개념부터 문제 유형까지 (1) | 2024.09.19 |
---|---|
[프로그래머스] 주식가격 C++ (0) | 2024.09.19 |
[백준] 6198 옥상 정원 꾸미기 C++ (0) | 2024.09.19 |
[백준] 2493 탑 C++ (1) | 2024.09.04 |
Big-O Notaion 빅 오 표기법 - 알고리즘의 시간 복잡도를 나타내는 표기법 (1) | 2024.03.15 |