프로그래머스

프로그래머스(기능개발)풀이 C++

Shin_jisoo 2020. 11. 2. 11:45
728x90

programmers.co.kr/

 

프로그래머스

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

programmers.co.kr

programmers.co.kr/learn/courses/30/lessons/42586

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr

1) 주석 없는 version

#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 dayCount=0;
        while(progresses[i]<100)
        {
            progresses[i]+=speeds[i];
            dayCount++;
        }
        q.push(dayCount);
    }
    
    int cnt=1;
    int curr=q.front();
    q.pop();
    while(!q.empty()){
        if(q.front()<=curr)
        {
            q.pop();
            cnt++;
        }
        
        else{
            answer.push_back(cnt);
            cnt=1;
            curr=q.front();
            q.pop();
        }
            
    }
    
    answer.push_back(cnt);
    
    return answer;
}

2) 주석 있는 version

#include <string>
#include <vector>
#include <queue> // queue 추가

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    queue<int> q; // queue를 앞으로 q로 사용
    
    for(int i=0;i<progresses.size();i++) //progresses.size() 까지 i를 1씩 증가
    {
        int dayCount=0; // 한 작업이 완료될 때까지의 날짜를 저장할 변수 선언
        while(progresses[i]<100) // 100이 될때까지 반복
        {
            progresses[i]+=speeds[i]; // 하루에 speeds 만큼 증가하므로 작업 진도에 작업 속도 더해줌
            dayCount++; // 날짜 하루 증가
        }
        q.push(dayCount); // 한 작업이 완료될 때까지의 날짜를 q에 넣어주기
    }
    
    int cnt=1; // 배포될 작업 수 저장할 변수 선언
    int curr=q.front(); // queue의 첫번째 작업을 curr 변수에 저장
    q.pop(); // curr 뽑아내기
    while(!q.empty()){ // queue가 비어있지 않을 때까지
        if(q.front()<=curr) // queue의 첫번째 작업이 curr 보다 작을 경우
        {
            q.pop(); // 작업을 뽑아내면서
            cnt++; // 배포할 작업 수 1 증가
        }
        
        else{ // queue의 첫번째 작업이 curr 보다 작지 않은 경우
            answer.push_back(cnt); // vector 제일 뒤에 cnt값 넣기
            cnt=1; // 배포할 작업의 수는 1
            curr=q.front(); // 첫번째 작업은 curr
            q.pop(); // curr 뽑아내기
        }
            
    }
    
    answer.push_back(cnt); // vector 제일 뒤에 cnt값 넣기
    
    return answer;
}