경험의 기록

문제

https://programmers.co.kr/learn/courses/30/lessons/42586

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr

 

풀이

0. 문제 해석

  1. 각각의 작업이 완료되는 시각을 계산하여 queue에 담는다.
  2. 하나의 기준점을 quque에서 뽑고 queue에서 기준점보다 더 큰수가 나올때 까지 까지 꺼내고 그 개수를 리스트에 저장한다.
  3. quque가 빌때까지 2번 과정을 반복한다.
  4. 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
    }
}
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading