프로그래밍/알고리즘
프로그래머스/스택・큐/기능개발
Doublsb
2021. 8. 10. 23:39
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
피드백
뭐든 객체지향으로 생각하면 어렵지 않은 것 같다.
반응형