[프로그래머스] 기능개발

김개발·2021년 10월 6일
0

프로그래머스

목록 보기
42/42

문제 푼 날짜 : 2021-10-06

문제

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42586

접근 및 풀이

스택을 이용하여 쉽게 풀 수 있는 문제였다.
아래의 생각대로 코드를 구현해주었다.

  1. 각 작업별로 완성까지 걸리는 날을 구해준다.
  2. 처음 스택에 들어간 작업보다 완성까지 걸리는 날이 작거나 같으면 push해준다.
  3. 그렇지 않은 작업이 들어올 경우, 스택에 들어있는 것들이 한 번에 배포되는 작업을 뜻하므로 그 상태의 스택의 크기를 저장해준다.
  4. 다음 작업부터 다시 스택에 넣어주어 2.부터 반복한다.

코드

#include <string>
#include <vector>
#include <cmath>
#include <iostream>
#include <stack>

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    int totalWork = progresses.size();
    
    vector<int> days;
    for (int i = 0; i < totalWork; i++) {
        days.push_back(ceil((float) (100 - progresses[i])/speeds[i]));
    }
    
    stack<int> st;
    int first;
    for (int d : days) {
        if (st.empty()) {
            first = d;
            st.push(d);
        } else {
            if (first >= d) {
                st.push(d);
            } else {
                answer.push_back(st.size());
                while (!st.empty()) {
                    st.pop();
                }
                first = d;
                st.push(d);
            }
        }
    }
    answer.push_back(st.size());
    return answer;
}

결과

피드백

스택을 이용한 문제도 어려우면 생각하기 쉽지 않은 것 같다. 더 많은 문제를 풀어봐야겠다.

profile
개발을 잘하고 싶은 사람

0개의 댓글