알고리즘 부셔버렷/ProblemSolving

[프로그래머스] 기능개발 (문제 설명, 해결 과정, 코드 전문, c++)

Unagi_zoso 2022. 6. 3. 00:43

 

  문제 설명

 

 

본 문제는 프로그래머스의 기능개발 문제이다.

출 처 : https://programmers.co.kr/learn/courses/30/lessons/42586

 

 

 

 

 

 

  해결 과정

 

주어진 작업 진도의 앞차례부터 100을 달성하면 임시적인 set에 담습니다. 뒤에 있는 작업들의 진행상태도 고려해

앞차례 작업보다 빠르게 끝난 작업들을 임시적인 set에 담고 뒤에 아직 진행 중인 작업을 만나면 임시적인 set의 사이즈를

저장합니다.그리고 진행 중인 작업도 달성되면 같은 행동을 반복합니다. 

그렇게 저장한 배열을 반환합니다.

 

 

 

 

  코드 전문

 

 

#include <string>
#include <vector>
#include <set>

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    vector<int> p = move(progresses);
    vector<int> s = move(speeds);
    vector<multiset<int>>  v_s;
    multiset<int> t_s;
    int x  = 0;
    
    while(x < p.size())
    {
        for (int i = x; i < p.size(); i++)
        {
            p[i] += s[i];
        }
        for (int i = x; i < p.size(); i++)
        {
            
            if (p[x] >= 100) 
            {
                t_s.insert(x);
                x++;
            }
            else
            {
                if (!t_s.empty())
                {
                    v_s.emplace_back(t_s);
                    t_s.clear();
                }
            }
        }
        if (!t_s.empty())
        {
            v_s.emplace_back(t_s);
            x++;
        }
    }
    for (auto i : v_s)
    {
        answer.emplace_back(i.size());        
    }
    
    return answer;
}

 

 

 

 

  느낀 점 (잡설 99% , 배운점 1%(많은 편))

 

더보기

set을 써봤습니다.  insert나 empty, clear 편리한 함수가 많네요. 이번 문제는 저보다 훨씬 뛰어난 코드들이

많았습니다.  그분들의 코드도 진득히 살펴보고 배워야겠네요.

 

 

 

 

 

 

 

긴 글 읽어주셔서 감사합니다. 

부족한 점이 있다면 부디 알려주시면 감사하겠습니다.