[프로그래머스/큐] Level 2 기능개발 (JAVA)
문제
풀이 (2021.02.04)
Function
객체를 생성해서 Queue에 차례로 넣는다.- Queue의 헤드가 완료된 기능이면
count
를 증가시킨다. 완료되지 않은 기능이 나올 때까지 해당day
의count
를 체크한다. - Queue의 헤드가 완료되지 않은 기능이면 그 어떤 기능도 완료될 수 없기 때문에
day
만 증가시킨다. - 결과 ArrayList를 Array로 변환시켜 리턴한다.
코드
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
Queue<Function> functions = new LinkedList<>();
for (int i = 0; i < progresses.length; i++) functions.offer(new Function(progresses[i], speeds[i]));
int day = 0, count = 0;
List<Integer> answer = new ArrayList<>();
while (!functions.isEmpty()) {
while (functions.peek().progress + day * functions.peek().speed >= 100) {
functions.poll();
count++;
if (functions.isEmpty()) break;
}
if (count != 0) {
answer.add(count);
count = 0;
}
day++;
}
return answer.stream().mapToInt(Integer::intValue).toArray();
}
}
class Function {
int progress;
int speed;
public Function(int progress, int speed) {
this.progress = progress;
this.speed = speed;
}
}
풀이 (2021.08.24)
코드
import java.util.*;
class Solution {
private static final int DONE = 100;
private int[] progresses;
private int[] speeds;
private int total;
public int[] solution(int[] progresses, int[] speeds) {
this.progresses = progresses;
this.speeds = speeds;
this.total = progresses.length;
List<Integer> answer = new ArrayList<>();
int work = 0;
while (work < total) {
int day = workDay(work);
int finished = 1;
work++;
while (work < total) {
if (workDay(work) > day) {
break;
}
finished++;
work++;
}
answer.add(finished);
}
return answer.stream().mapToInt(Integer::valueOf).toArray();
}
private int workDay(int target) {
int remain = DONE - progresses[target];
int speed = speeds[target];
if (remain % speed == 0) {
return remain / speed;
}
return remain / speed + 1;
}
}
Author And Source
이 문제에 관하여([프로그래머스/큐] Level 2 기능개발 (JAVA)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jwkim/queue-function-development저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)