기능개발

NJW·2022년 3월 25일
0

코테

목록 보기
21/170

들어가는 말

업데이트 할 기능과 그 기능의 개발속도가 주어진다. A라는 기능과 B라는 기능이 있을 때 B라는 기능이 먼저 끝났어도 A라는 기능이 끝나지 않았기에 기다려야 한다. 그리고 A라는 기능이 끝나면 A와 B를 같이 배포한다. 한 번에 두 개가 배포되는 것이기에 값은 2다.

코드 설명

스택/큐로 문제가 분류되어 있기에 나는 큐로 풀었다. 일단 남는 시간을 큐에 저장해줘야 한다고 생각했다. for로 전체 기능을 돌리는데 100에다가(100%니까) 현재 기능의 진행 상태를 빼누다. 그 다음 남는 시간이 0보다 클 때까지 left_time - speeds[i]를 해줘서 며칠이 걸리는 지 계산해준다. 그리고 그 값을 q에 push한다.

그 다음은 A라는 기능과 B라는 기능의 시간을 비교해주는 건데 나는 여기서 조금 헤맸다. 바로 한 문장 때문에...^^. 일단 front에다가 첫 q의 값을 넣어준다. 그리고 pop을 해줘야 한다. q가 빌 때까지 while문을 돌리는데, 만일 저장한 front의 값이 현재의 front보다 크다면(즉, A가 B보다 더 늦게 완성된다면) num2에다가 1을 더해주고 front를 pop해준다. 만일 아니라면 num2의 값을 answer에 넣어주고 변수 front의 값을 현재의 front로 바꿔준다. 그리고 현재의 프론트는 pop해준다(중요!!!). num2를 1로 초기화하는 것도 잊어서는 안된다.

그리고 중요한 게 하나 더 남았는데... 바로 while문이 끝나더라도 answer에는 num2를 넣어주는 것이다. 왜냐하면 마지막에 계산된 num2는 따로 push될 명령문이 없기 때문이다. 자꾸 마지막 숫자가 안 나와서 q.size()는 1일때 어쩌구 해봤지만 그냥 while문 밖에 answer.push_back(num2)만 해주면 될 일이었다. ㅎㅎ... 이것 때문에 40분은 헤맨 거 같은데.

여튼 만일 마지막 데이터가 나오지 않으면 그 데이터를 넣었는지 확인해 보자.

코드

#include <string>
#include <vector>
#include <queue>
#include<iostream>

using namespace std;

/*며칠간 작업할 수 있는지를 큐에 넣어준다.
front에 있는 숫자보다 더 작은 숫자들을 세서 그 숫자를 벡터에 넣어준다.
뒤에 있는 숫자들을 지워준다.*/

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    queue<int> q;
    int left_time = 0;
    int count;
    int front;
    int num2 = 1;
    
    /*작업에 걸리는 날짜를 구해서 queue에 넣어줌*/
    for(int i=0; i<progresses.size(); i++){
        left_time = 100 - progresses[i];
        while(left_time > 0){
            left_time = left_time - speeds[i];
            count++;
        }
        q.push(count);
        
        count = 0;
    }

    front = q.front();
    q.pop();
    
    while(!q.empty()){
        if(front >= q.front()){
            num2++;
            q.pop();
        }else if(front < q.front()){
            answer.push_back(num2);
            front = q.front();
            q.pop();
            num2 = 1;
        }
    }
    answer.push_back(num2);
 
  

    return answer;
}
profile
https://jiwonna52.tistory.com/

0개의 댓글