https://programmers.co.kr/learn/courses/30/lessons/42586
방법 1: 문제에 주어진 그대로 구현. queue 사용
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
40
41
42
43
44
45
|
#include <string>
#include <vector>
#include <queue>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
// queue에 모든 인덱스 넣기
queue<int> q;
for (int i = 0; i < progresses.size(); i++)
{
q.push(i);
}
vector<int> answer;
int tobe = 0;
while (!q.empty())
{
// 아직 배포안된 기능부터 작업 진행
for (int i = tobe; i < progresses.size(); i++)
{
if (progresses[i] < 100)
{
progresses[i] += speeds[i];
}
}
// 배포 다음순서 작업이 완료 되면
if (progresses[tobe] >= 100)
{
// 완료 상태인 작업물 모두 배포 & 카운팅
int cnt = 0;
while (!q.empty() && progresses[q.front()] >= 100)
{
q.pop();
cnt++;
}
tobe += cnt;
answer.push_back(cnt);
}
}
return answer;
}
Colored by Color Scripter
|
방법 2: 작업 완료 시간을 중심으로
(프로그래머스 sterilizedmilk님 풀이 참고)
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
|
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 (day > max_day)
{
answer.push_back(1);
max_day = day;
}
// 그렇지 않고, 이전 기능이 완료될 때까지 기다려야 할때
else
{
}
}
return answer;
}
Colored by Color Scripter
|
방법 2가 너무 갓갓이다
방법 1은 시간의 흐름마저도 너무 충실히 구현해버린 코드 ㅋㅋ
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스]스택/큐 : 쇠막대기 (level 2)(c++) (0) | 2020.04.29 |
---|---|
[프로그래머스]스택/큐 : 탑 (level 2) (c++) (0) | 2020.04.29 |
[프로그래머스]스택/큐 : 프린터 (level 2) (c++) (0) | 2020.04.28 |
[프로그래머스]스택/큐 : 주식가격 (level 2) (c++) (0) | 2020.04.28 |
[프로그래머스][2019 카카오 개발자 겨울 인턴십] 크레인 인형뽑기 게임 (level 1)(c++) (0) | 2020.04.28 |
댓글