문제 주소입니다.
https://programmers.co.kr/learn/courses/30/lessons/42586
1. 문제 설명
2. 문제 해석
3. 소스 코드
4. 결과
1. 문제 설명
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요. |
제한사항
|
예시
입출력 예
progresses | speeds | return |
[93,30,55] | [1,30,5] | [2,1] |
2. 문제풀이
1. 하루하루 기능별 작업 속도는 다르다. -> 큐에서 돌려가며 작업 량을 추가한다. 2. 처음 배포해야하는 기능이 완성되지 않았다면 뒤에 기능이 완성되어도 배포 할 수 없다. -> 큐에서 처음값을 확인하고 100퍼센트가 넘었다면 배포시작 3. 배포를 할때 뒤에 기능이 완성되었다면 완성된 만큼 배포한다. ->큐에서 100퍼가 아닐때까지 계속 꺼낸다. 이정도 유의하시고 시작하시면 될 것같습니다. (그런데 난이도가 2LV가 아니고 1LV같은 느낌...) |
3. 소스코드
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
31
32
33
34
35
36
37
38
39
|
#include <string>
#include <vector>
#include <queue>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
//현재 진척도
queue<int> current;
//큐에 옮기기
for (auto p : progresses)
current.push(p);
while (!current.empty()){
//진척도 추가
for (int i = 0; i < current.size(); i++){
int p = current.front();
current.pop();
current.push(p + speeds.at(i));
}
int count = 0;
//큐 내부검사
while (true){
//진척도가 100퍼센트 이상이라면 큐에서 제거하고 카운트 증가
if (current.size() >0 && current.front() >= 100){
current.pop();
speeds.erase(speeds.begin());
count++;
continue;
}
break;
}
//카운트가 한개이상 올라갔다면
//정답리스트에 몇개가 배포되는지 추가
if (count > 0)
answer.push_back(count);
}
return answer;
}
|
4. 결과
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
크레인 게임 python(카카오 2019 겨울인턴십)[프로그래머스] (0) | 2020.05.03 |
---|---|
프린터 C++(스택/큐)[프로그래머스] (0) | 2020.05.02 |
베스트 앨범 C++(해시)[프로그래머스] (0) | 2020.04.30 |
위장 C++(해시)[프로그래머스] (0) | 2020.04.29 |
전화번호부 C++(해시)[프로그래머스] (0) | 2020.04.28 |
댓글