프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이 방법

작업 진도가 자연수이므로 99에 작업 진도를 뺀 값을 작업 속도로 나누어서 남은 날짜를 구해서 큐에 넣는다.

이후 큐의 front이 저장된 변수와 비교해서 작으면 완료한 작업의 개수를 1씩 증가시켜주고 pop을 한다.

만약 front보다 크다면 front값이 저장된 변수에 front값을 새로 대입하고 저장된 완료한 작업의 개수를 answer에 push_back한 다음 완료한 작업의 개수를 0으로 초기화한다.

이를 큐가 빌때까지 반복한 다음 마지막으로 완료한 작업의 개수를 push_back하고 answer를 리턴한다.

 

1. int형 큐 q를 선언한다.

2. (99 - progresses[i]) / speeds[i]를 q에 담는다.

3. 이후 q의 front를 저장할 tmp1과 완료한 작업의 개수를 저장할 tmp2를 선언한다.

4-1. q가 비어있지 않은 동안 q의 front가 tmp1이하면 tmp2++, q.pop()을 한다.

4-2. front가 tmp1보다 크다면 tmp1에 q.front를 새로 대입하고 answer.push_back(tmp2)를 해준 뒤 tmp2를 0으로 초기화한다.

5. 반복문이 끝나면 tmp2를 answer에 push_back하고 answer 리턴 

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

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    queue<int> q;
    
    int size = progresses.size();
    
    for(int i = 0; i < size; i++)
        q.push((99 - progresses[i]) / speeds[i] );
    
    int tmp1 = q.front();
    int tmp2 = 0;
    
    while(!q.empty()) {
        if(q.front() <= tmp1) {
            tmp2++;
            q.pop();
        }
        else {
            tmp1 = q.front();
            answer.push_back(tmp2);
            tmp2 = 0;
        }
    }
    answer.push_back(tmp2);
    
    return answer;
}

'프로그래머스 > 2레벨' 카테고리의 다른 글

[1차] 뉴스 클러스터링/C++  (0) 2023.01.12
전화번호 목록/C++  (0) 2023.01.12
위장/C++  (0) 2023.01.10
괄호 회전하기/C++  (0) 2023.01.10
[1차]캐시/C++  (0) 2023.01.10

+ Recent posts