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

woga·2020년 8월 16일
0

알고리즘

목록 보기
2/26
post-thumbnail

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

문제 난이도

Lv2


문제 접근법

이건 분류부터 스택/큐에 들어가있길래 그냥 단박에 queue를 이용해야하는구나! 힌트를 얻을 수 있었다.
만약 저 분류만 아니였으면 vector에 해결했을 것 같다.

  1. 하루에 몇 % 씩해서 남은 작업량이 며칠만에 끝내는지 계산한다.
  2. 계산한대로 겹치는 일수에 몇개의 작업량을 끝낼 수 있는지 answer 벡터에 넣는다.

추가한 라이브러리
queue

통과 코드

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

피드백

이러면 안되는데 while 부분에서 고민을 했다. 습관적으로 while안에서 q.front(), q.pop()을 썼기 때문인지 안에서 처리하려고 고민했다.
그러다 그럴필요없이 밖에서 처리하고 들어가도 된다 생각했고 위와 같은 코드가 나왔다.

그리고 다른 사람 코드 봤는데 for문 하나로 끝낸게 대박이였다 그것도 queue는 안쓰고 vector만으로 처리했다.
++answer.back() 이란 코드를 사용했다. 먼저 1이란 숫자를 두고 그 다음 progress가 작으면 back으로 둔 값을 ++해주는 논리였다.
이것도 참고해서 다른 코드에서 써봐도 좋을듯하다.

profile
와니와니와니와니 당근당근

0개의 댓글

관련 채용 정보