프로그래머스/스택・큐/기능개발
글 작성자: Doublsb
https://programmers.co.kr/learn/courses/30/lessons/42586
풀이
- 각 기능의 개발 속도는 다름
- 그러나 앞 기능이 먼저 배포되어야 뒤의 기능이 배포될 수 있다
- 배포는 하루에 한 번만 가능. 하루의 끝에 이루어진다
- 각 배포마다 몇 개의 기능이 배포되는지 return 할 것
- TaskList 객체에 List로 큐를 만들고, 그 안에 Task 객체를 넣는다
- Task 객체의 Do()는 현재 progress를 갱신시킨다
- Task 객체의 isDone은 progress가 100 이상인지 알린다
- 큐의 앞부터 반복하여 isDone이 true인지 체크, 맞다면 해당 객체를 Remove한다
C#
using System;
using System.Linq;
using System.Collections.Generic;
public class Solution {
public int[] solution(int[] progresses, int[] speeds) {
var taskList = new TaskList();
var result = new List<int>();
for(int i=0; i<progresses.Length; i++){
taskList.Add(speeds[i], progresses[i]);
}
while (taskList.Count > 0) {
taskList.Aging();
var count = taskList.Publish();
if(count > 0) result.Add(count);
}
return result.ToArray();
}
}
public class TaskList {
private List<Task> data = new List<Task>();
public void Add(int speed, int progress){
data.Add(new Task(speed, progress));
}
public int Count {
get => data.Count;
}
public void Aging() {
foreach(var task in data) task.Do();
}
public int Publish() {
int count = 0;
foreach(var task in data) {
if(task.isDone) {
count++;
}
else break;
}
for(int i=0; i<count; i++){
data.RemoveAt(0);
}
return count;
}
}
public class Task {
private int speed;
private int progress;
public Task(int speed, int progress){
this.speed = speed;
this.progress = progress;
}
public bool isDone {
get => progress >= 100;
}
public void Do() {
progress += speed;
}
}
결과
100.0 / 100.0
피드백
뭐든 객체지향으로 생각하면 어렵지 않은 것 같다.
반응형
'프로그래밍 > 알고리즘' 카테고리의 다른 글
프로그래머스/스택・큐/다리를 지나는 트럭 (0) | 2021.08.13 |
---|---|
프로그래머스/스택・큐/프린터 (0) | 2021.08.12 |
프로그래머스/위클리 챌린지/상호 평가 (0) | 2021.08.10 |
프로그래머스/해시/베스트앨범 (0) | 2021.08.10 |
프로그래머스/해시/위장 (0) | 2021.08.07 |
댓글
이 글 공유하기
다른 글
-
프로그래머스/스택・큐/다리를 지나는 트럭
프로그래머스/스택・큐/다리를 지나는 트럭
2021.08.13 -
프로그래머스/스택・큐/프린터
프로그래머스/스택・큐/프린터
2021.08.12 -
프로그래머스/위클리 챌린지/상호 평가
프로그래머스/위클리 챌린지/상호 평가
2021.08.10 -
프로그래머스/해시/베스트앨범
프로그래머스/해시/베스트앨범
2021.08.10