[프로그래머스/c++] Level 2: 기능 개발

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

🌱 풀이

  • 나는 문제의 설명 그대로 일일이 구현하였다.
    sum: 완료된 기능 전체 갯수
    cnt: index번째 기능이 완료되었을때 함께 완료된 기능 갯수
    index: progresses 앞에서 부터 탐색할때의 index
  • 먼저 while을 true로 계속 돌린다. answer 벡터안에 있는 수의 합이 progresses의 사이즈와 같으면 모든 기능 개발을 완료한 것이므로, sum에 answer각 원소를 전부 더해놓고, sum==progresses 인순간 break를 해주었다.
  • while안에서는 progresses의 원소들을 전부 돌아가며 각 해당하는 인덱스의 speeds를 더한다.
  • 현재 보고있는 원소의 인덱스는 index라고 두었다
    • 현재 기능이 완료되었으면(==100% 도달) 이후 기능들이 완료된것이 있는지 확인하고, 갯수를 갱신한다. 이때 만약 마지막 기능이 완료되었으면 더이상 볼것이 없으므로 현재까지 센 갯수를 push하고 break한다.
      - 현재 기능이 완료되지 않았으면 index를 현재 보고있는 인덱스로 갱신하고, 현재까지 센 갯수를 push한후 break한다.

🌱 코드

  • 내 코드
#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    int index=0;
    int cnt=0;
    int sum=0;
    while(true){
        for(int i=0; i<progresses.size(); i++){
              progresses[i]+=speeds[i];
        } 
        cnt=0;
            if(progresses[index]>=100){
                for(int j=index; j<progresses.size(); j++){
                    if(progresses[j]>=100){
                        cnt++;
                        if(j==progresses.size()-1){
                            answer.push_back(cnt);
                            sum+=cnt;
                            break;
                        }
                    }else{
                        index=j;
                        answer.push_back(cnt);
                        sum+=cnt;
                        break;
                    }
                }
            }
         if(sum==progresses.size()){
            break;
        }
            
        }
    
    return answer;
}

🌱 베스트 코드

좋은 웹페이지 즐겨찾기