https://school.programmers.co.kr/learn/courses/30/lessons/42586
처음에 이 문제를 접했을 때, queue 자료구조에 각 progress마다 100%까지 몇 일이 소요되는지를 저장해놓고
FIFO 특성을 사용해서 앞의 소요일을 기준 값으로 뒤의 소요일을 비교했을 때, 작거나 같다면 같이 배포가 가능함으로 cnt를 증가시키고, 만약 뒤의 소요일이 크다면 answer 배열에 값을 추가한 뒤 기준 값을 교체하는 방식으로 문제를 해결해야겠다고 생각했다.
✅ queue 사용한 구현코드
#include <string>
#include <vector>
#include <queue>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds)
{
// progresses 요소 마다 몇 일이 걸리는지 저장
queue<int> q;
for (int i = 0; i < progresses.size(); ++i)
{
int tar = 100 - progresses[i];
if (tar % speeds[i] != 0) q.push(tar / speeds[i] + 1);
else q.push(tar / speeds[i]);
}
// 앞의 기능 기준으로 뒤의 배포 일이 작으면 cnt 증가
// 뒤의 배포일이 크면 현재 cnt를 answer에 저장
vector<int> answer;
int cnt = 1;
int cur = q.front();
q.pop();
while (!q.empty())
{
int next = q.front();
if (cur >= next)
{
cnt++;
q.pop();
}
else
{
answer.push_back(cnt);
cur = next;
cnt = 1;
q.pop();
}
}
if (q.empty()) answer.push_back(cnt);
return answer;
}
'공부 > Code Cata' 카테고리의 다른 글
피로도 / 브루트 포스 기법(순열) (1) | 2025.03.11 |
---|---|
프로세스 / deque 활용 (0) | 2025.03.10 |
의상 / 곱의 법칙(조합론) (0) | 2025.02.17 |
할인 행사 (0) | 2025.02.13 |
N x N 배열 자르기 (0) | 2025.02.11 |