문제
풀이
고려해야할 핵심 내용은 다음과 같습니다.
- 자신의 작업이 완료되었을때 자기 앞의 모든 일이 완료되어야만 배포 가능하다.( 아니면 대기 )
저는 이를 다음과 같은 매커니즘으로 풀었습니다.
- 각 progresses에 for문을 사용해서 해당하는 speeds를 더해줍니다. (for문을 한바퀴 다 돌때마다 day가 하루씩 지난다는 생각)
- 만약 progresses의 어떤 작업이 100이상이 되었다면 작업이 끝났다는 것인데 이때 해당 작업의 위치의 인덱스가 0일때만 해당 날짜에 배포된 처리를 해줍니다. = 벡터에서 erase해줍니다.
- for문을 한번 다 돌았을때 배포된 작업의 갯수가 0이 아니라면 aws벡터(reuturn 예정인 벡터)에 push_back해줍니다.
- 만약 배포된 작업의 갯수가 총 작업의 갯수와 같아진다면 반복문을 종료하고 return해줍니다.
코드로 구현하면 다음과 같습니다.
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
int complete=0; //완료된 작업의 갯수
int progresses_num=progresses.size();
vector<int> aws;
while(complete!=progresses_num) //작업이 모두 완료 될때까지 while문 실행
{
int limit=progresses.size();
int temp=0; //해당 날짜에 배포된 작업의 갯수
for(int i=0; i<limit; i++)
{
progresses[i]=progresses[i]+speeds[i];
if(progresses[i]>=100 && i==0) //해당 작업이 완료되었고 앞에 작업이 꿑나서 erase된 상태라면
{
temp++;
progresses.erase(progresses.begin()+i);
speeds.erase(speeds.begin()+i);
i--; //벡터에서 erase해줬으므로 i--를 해주고 그 다음에 i++하게됨으로 정상작동
limit--;
complete++;
}
}
if(temp!=0) //1개 이상 배포된 날일때만 push_back해줌
aws.push_back(temp);
}
return aws;
}
'알고리즘 > 프로그래머스 문제풀이' 카테고리의 다른 글
[C++] 주식가격(Lv.2) (0) | 2022.09.08 |
---|---|
[C++] 올바른 괄호 (Lv.2) (0) | 2022.09.04 |
[C++] 124 나라의 숫자 (Lv.2) (0) | 2022.09.04 |
[C++] 멀쩡한 사각형 (Lv.2) (0) | 2022.08.30 |
[C++] 단체사진 찍기 (Lv.2) (0) | 2022.08.29 |