프로그래밍/코딩테스트

코딩테스트 : 기능개발

백사니 2025. 4. 16. 00:36
728x90
반응형

해당 문제는 progresses에 현재 진행률, speeds에 각 기능별 하루 개발 속도를 이용해 모든 progresses가 언제 완료되는지 구하는 문제이다.

이 문제의 핵심은 이미 기능이 완료가 되어도 이전 기능이 완료가 되지 않으면 이전 기능이 완료할때까지 대기했다가 같이 배포된다는 것이다.

#include <string>
#include <vector>
#include <cmath>

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer; // 배포되는 기능의 개수를 저장할 벡터
    vector<int> day; // 각 기능의 완료 일수를 저장할 벡터
    
    // 각 기능의 완료까지 걸리는 일수를 계산합니다.
    for(int i = 0; i < progresses.size(); i++)
    {
        // 완료 일수 계산: (100 - 현재 진도) / 개발 속도
        day.push_back(ceil((100.0 - progresses[i]) / speeds[i])); // 소수점 올림 처리
    }
    
    int time = -1; // 이전 기능의 완료 일수를 저장하기 위한 변수

    // 각 기능의 완료 일수를 순회합니다.
    for(int i : day)
    {
        // 현재 기능의 완료 일수가 이전 기능보다 크면 새로운 배포 시작
        if(time < i)
        {
            time = i; // 현재 기능의 완료 일수를 저장
            answer.push_back(1); // 새로운 배포 그룹을 시작하므로 1 추가
        }
        else
        {
            // 현재 기능이 이전 기능과 함께 배포될 경우
            int n = answer.back(); // 현재 그룹의 기능 개수를 가져옵니다.
            n++; // 기능 개수를 증가
            answer.pop_back(); // 이전 그룹 개수 제거
            answer.push_back(n); // 증가된 개수를 다시 추가
        }
    }
    
    return answer; // 최종 결과 반환
}
728x90
반응형

'프로그래밍 > 코딩테스트' 카테고리의 다른 글

코딩테스트 : H-Index  (0) 2025.04.16
코딩테스트 : 의상  (0) 2025.04.16
코딩테스트 : 전화번호 목록  (2) 2025.04.16
코딩테스트 : 프로세스  (0) 2025.04.16
코딩테스트 : 롤케이크 자르기  (0) 2025.04.16