본문 바로가기
알고리즘/c++ 프로그래머스

[프로그래머스 기능개발] c++ (코드, 풀이)

by 말린밴댕이_공부 2023. 5. 14.
반응형

문제 링크

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

 

프로그래머스

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

programmers.co.kr

 

문제

코드 및 풀이

/*
기능 개발

먼저 배포되어야하는 순서대로 작업의 진도가 적힌 progresses
각 작업의 개발속도가 적힌 speeds
각 배포마다 몇개의 기능이 배포되는지를 return

결국 먼저 끝냈더라도 앞에의 progresses가 끝나지 않으면 기다림

*/

간단하게 전꺼가 끝나지 않았다면 기다리고 끝났다면 연속적으로 끝난 작업에 대해서 progress++을 해서 진행을 하였습니다.

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    int done = 0; //어디까지 끝냈는지에 대한 index로 설정
    int progress = 0; //앞에 있는곳이 진행될때마다 뒤에 것에 대해 진행이 된것이 연속적인것을 저장
   
    while(1){
        for(int i = 0; i < speeds.size();i++){
            progresses[i] += speeds[i];
        }
       
        if(progresses[done] >= 100){
            while(progresses[done] >= 100 && done < progresses.size()){
                done++;
                progress++;
            }
            answer.push_back(progress);
            progress = 0; // 다시 0으로 초기화 해줌으러써 다른 작업이 완료될때 ++을 함.
        }
       
        if(done >= progresses.size())
            break;
    }
   
    return answer;
}

제 코드를 보며 다른사람의 풀이가 궁금해서 봤는데

 

 

다른 사람 풀이

#include <string>
#include <vector>
#include <iostream>
using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;

    int day;
    int max_day = 0;
    for (int i = 0; i < progresses.size(); ++i)
    {
        day = (99 - progresses[i]) / speeds[i] + 1;

        if (answer.empty() || max_day < day)
            answer.push_back(1);
        else
            ++answer.back();

        if (max_day < day)
            max_day = day;
    }

    return answer;
}

반복문 하나로 끝내시는 모습을 보고 많이 현타가 온 느낌이 없지 않아 있다..

 

진짜 고수가 너무 많으신것 같습니다 ㅠ

 

 

반응형

댓글