글 작성자: 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

 

피드백

뭐든 객체지향으로 생각하면 어렵지 않은 것 같다.

반응형