공부/Code Cata

기능 개발 / queue 사용

동그래님 2025. 2. 18. 10:36

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;
}