하나의 기준점을 quque에서 뽑고 queue에서 기준점보다 더 큰수가 나올때 까지 까지 꺼내고 그 개수를 리스트에 저장한다.
quque가 빌때까지 2번 과정을 반복한다.
quque가 비었을 때 2번에서 저장한 리스트를 리턴한다.
1번에서 작업 완료 시각을 계산하는 방법은
작업은 100이 완성이므로 100에서 이미 완료되있는 값을 뺀값을 작업속도로 나눠준다.
나머지가 있을 경우 그 작업을 위해 하루 더 일해야하므로 +1 해준다.
1. 전체 코드
// [프로그래머스] 기능개발 (Kotlin)
import java.util.*
class Solution {
fun solution(progresses: IntArray, speeds: IntArray): IntArray {
var answer = intArrayOf()
var queue : Queue<Int> = LinkedList<Int>() // 완성되는 날 저장
var result = arrayListOf<Int>() // 결과값 저장
for(i in progresses.indices){
val remain = 100 - progresses[i] // 남은 작업량
val curSpeed = speeds[i]
var result = 0
if(remain % curSpeed == 0){
result = remain / curSpeed
}
else{
result = remain / curSpeed + 1
}
queue.offer(result)
}
while(queue.isNotEmpty()){
var curValue = 1 // 배포 가능한 개수
var cur = queue.poll() // 현재 기준값
while(queue.isNotEmpty()){
if(queue.peek() <= cur){
queue.poll()
curValue++
}
else{
break
}
}
result.add(curValue)
}
answer = result.map { i -> i }.toIntArray()
return answer
}
}