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

JangGwon·2022년 11월 4일
0

문제 설명


내 풀이

문제를 조금 요약하자면 각 기능은 진도가 100%일 때 서비스에 반영할 수 있고, 각 기능의 개발 속도는 모두 다르므로 뒤의 기능이 앞의 기능보다 먼저 개발될 수 있다. 하지만! 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포된다는점이다.
문제 분류는 스택/큐로 분류되어있지만, 반복문으로도 간단히 풀 수 있을거 같아서 반복문을 사용하여 풀었는데, 저의 문제 풀이는 이렇습니다.

  • For문을 이용해 1일부터 최대 100일까지 순회하는 반복문을 만듬
  • 현재 개발중인 기능의 위치를 가리키고, 큐의 front()기능을 할 pivot 변수를 만듬
  • For문안에 while문을 이용하여 pivot 기반 현재 일에 완료된 기능이 몇개인지 체크
  • 계속 순회하면서, pivot의 위치 = progresses의 배열 길이(개발중인 기능 갯수)가 같아진다면 반복문 탈출


코드

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    
    int pivot = 0;			// 배열 방문 pivot 
    for (int i = 1; i <= 100; i++)		// i = day로, 작업 최대기간이 100일이니 최악의 경우 100번 반복.
    {
        int num = 0;		// 당일 기능 개발완료된 기능이 몇개인지 세는 코드
        
        // 완료된 기능이 몇개인지 체크하는 반복문 /  progresses.size() > pivot 조건은 세그먼트 폴드 방지하기 위함 
        while(progresses[pivot] + (i * speeds[pivot]) >= 100 && progresses.size() > pivot) 
        {
            pivot++;
            num++;		
        }
        if (num)			// 당일 완료된 기능이 있다면 answer에 완료된 기능 갯수 push 
        {
            answer.push_back(num);
        }
        if(progresses.size() == pivot)		// 기능 개발이 완료됐다면 반복문 탈출
            break;
    }
    return answer;
}

0개의 댓글