prgms.42586 - 기능개발
class Solution {
static class Task {
int id;
int progress;
int speed;
public Task(int id, int progress, int speed) {
this.id = id;
this.progress = progress;
this.speed = speed;
}
}
public int[] solution(int[] progresses, int[] speeds) {
List<Integer> answer = new ArrayList<>();
List<Task> tasks = new ArrayList<>();
Queue<Task> taskQueue = new LinkedList<>();
for (int i = 0; i < progresses.length; i++) {
Task task = new Task(i, progresses[i], speeds[i]);
tasks.add(task);
taskQueue.add(task);
}
while (!taskQueue.isEmpty()) {
int completed = 0;
for (Task task : tasks) {
task.progress += task.speed;
}
for (Task task : tasks) {
if (taskQueue.isEmpty()) break;
if (taskQueue.peek().id == task.id && task.progress >= 100) {
taskQueue.poll();
completed++;
}
}
if (completed > 0) {
answer.add(completed);
}
}
return answer.stream().mapToInt(i -> i).toArray();
}
}
import java.util.ArrayList;
import java.util.Arrays;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int[] dayOfend = new int[100];
int day = -1;
for(int i=0; i<progresses.length; i++) {
while(progresses[i] + (day*speeds[i]) < 100) {
day++;
}
dayOfend[day]++;
}
return Arrays.stream(dayOfend).filter(i -> i!=0).toArray();
}
}
import java.util.ArrayList;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
ArrayList<Integer> list = new ArrayList<>();
int temp = 0;
for (int i = 0; i < progresses.length; i++) {
int current = (100 - progresses[i]) / speeds[i];
if (temp < current) {
temp = current;
list.add(1);
} else list.set(list.size() - 1, list.get(list.size() - 1) + 1);
}
return list.stream().mapToInt(Integer::intValue).toArray();
}
}
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
Queue<Integer> q = new LinkedList<>();
List<Integer> answerList = new ArrayList<>();
for (int i = 0; i < speeds.length; i++) {
double remain = (100 - progresses[i]) / (double) speeds[i];
int date = (int) Math.ceil(remain);
if (!q.isEmpty() && q.peek() < date) {
answerList.add(q.size());
q.clear();
}
q.offer(date);
}
answerList.add(q.size());
int[] answer = new int[answerList.size()];
for (int i = 0; i < answer.length; i++) {
answer[i] = answerList.get(i);
}
return answer;
}
}
import java.lang.System;
import java.lang.Math;
import java.util.ArrayList;
class Solution {
int progressesCount;
int[] needDays;
ArrayList<Integer> workCountStorage;
public int[] solution(int[] progresses, int[] speeds) {
//Init
progressesCount = progresses.length;
needDays = new int[progressesCount];
workCountStorage = new ArrayList<>();
//필요한 작업일 계산
this.calcNeedDays(progresses, speeds);
//this.viewAll(needDays, 0);
//동시에 진행된 프로세스 계산
for(int step=0; step<progressesCount;)
{
int stepNeedDay = needDays[step];
//날짜 동시에 경과
for(int remainStep=step; remainStep<progressesCount; remainStep++)
{
needDays[remainStep] -= stepNeedDay;
}
//this.viewAll(needDays, step);
//완료한 작업까지의 갯수
int workCount = 1;
for(;step+workCount<progressesCount; workCount++)
{
if(needDays[step+workCount] > 0)
{
break;
}
}
System.out.println("workCount:"+workCount);
//완료한 작업 갯수 저장
workCountStorage.add(workCount);
//작업 갯수만큼 step 증가
step += workCount;
}
//int[] answer = {};
int[] answer = Solution.convertIntegers(workCountStorage);
return answer;
}
private void calcNeedDays(int[] progresses, int[] speeds)
{
for(int i=0; i<progressesCount; i++)
{
double remainProgress = 100 - progresses[i];
double fNeedDay = remainProgress / speeds[i];
needDays[i] = (int)Math.ceil(fNeedDay);
}
}
public static int[] convertIntegers(ArrayList<Integer> integers)
{
int size = integers.size();
int[] ret = new int[size];
for (int i=0; i<size; i++)
{
ret[i] = integers.get(i).intValue();
}
return ret;
}
private void viewAll(int[] array, int startIdx)
{
System.out.print("viewAll:");
int arrayCount = array.length;
for(int i=startIdx; i<arrayCount; i++)
{
System.out.print(array[i]+",");
}
System.out.println();
}
}