Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

hwooo

프로그래머스 (C/C++) 42536 : 기능개발 본문

Study/Algorithm

프로그래머스 (C/C++) 42536 : 기능개발

hwooo 2024. 4. 6. 22:23

https://school.programmers.co.kr/learn/courses/30/lessons/42586#

 

프로그래머스

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

programmers.co.kr

 

풀이

각 프로세스의 기능 개발이 끝나는 날짜를 벡터에 순서대로 저장, 인덱스가 프로세스의 넘버가 되게 했다.해당 벡터를 앞에서부터 순회하며 현재 프로세스의 개발을 마친 시점에서 그 전에 개발을 마친 프로세스의 개수를 세면 해당 숫자가 한 번 배포될 때의 프로세스 수가 된다.이를 프로세스 수만큼 반복한다.이 때, 첫 번째 프로세스를 기준점으로 삼아 전체 프로세스 개수가 1개일 경우는 예외처리를 해 주었다.

코드

#include <string>
#include <vector>

using namespace std;

#define MAXDAY 1000
typedef pair<int,int> pp;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    vector<int> Days;
    
    // 입력이 1개 이하일 때 입력 받은 프로세스 개수 반환
    if (progresses.size() < 2) {
        answer.push_back(progresses.size());
        return answer;
    }
    
    // 각 작업이 끝나는 날짜를 벡터에 저장, 인덱스 = 프로세스 순서
    for (int i = 0; i < progresses.size(); i++) {
        int endDay = (100 - progresses[i]);
        if (endDay % speeds[i])
            endDay = endDay / speeds[i] + 1;
        else
            endDay /= speeds[i];
        Days.push_back(endDay);
    }
    
    int proCnt = 1, open = Days[0], i = 1;
    while (i < Days.size()) {
        
        // 이전 프로세스가 배포되는 날짜 이전에 구현이 끝난 기능들의 개수 세기
        while (i < Days.size() && Days[i] <= open){
            proCnt++;
            Days[i] = MAXDAY;
            i++;
        }
        
        // 한 번에 배포되는 프로세스 수
        answer.push_back(proCnt);
        
        // 마지막 배포 날짜 갱신
        open = Days[i];
        proCnt = 0;
    }
    
    return answer;
}