본문 바로가기
코딩테스트/프로그래머스

[프로그래머스] 스택/큐 : 기능개발 Kotlin

by 일상 속 둔치 2020. 9. 7.

이전의 주식 문제와 비슷하다.

 

개발하는데 필요한 일수를 먼저 구하고 큐에 넣어준다.

 

큐의 맨 앞에 작업을 기준으로 둔다.

 

기준보다 이후의 일수가 작다면 기준이 끝날 때까지 기다려야 하는 것이므로 기다리며 카운팅을 한다.

 

기준보다 일수가 증가하면 해당 기능이 개발되었을 때에는 앞의 작업들은 전부 배포가 될것이기 때문에 앞에 배포가 되지 않은 것들을 전부 배포했다고 하고 배포 횟수를 늘려주자.

 

큐를 이용해서 필요한 일수를 넣어놓고 peek이나 poll로 하나씩 큐에서 빼서 사용하면 편하다!

 

import java.util.*

class Solution {
    fun solution(progresses: IntArray, speeds: IntArray): IntArray {
        var answer:IntArray
        var queue:Queue<Int> = LinkedList<Int>()
        
        /* 개발하는데 필요한 일수 구하기 */
        for(i in 0..progresses.size-1){
            var leftDay = 0

            leftDay = (100-progresses[i])/speeds[i]
            if((100-progresses[i])%speeds[i] != 0){
                leftDay++
            }
            queue.add(leftDay)
        }

        /* Queue의 앞 날짜보다 작은 일수 세기 */
        var result = mutableListOf<Int>()

        while(!queue.isEmpty()) {
            var count = 1
            var first = queue.poll()

            while (!queue.isEmpty() && queue.peek() <= first) {
                queue.remove()
                count++

            }
            result.add(count)
        }
        answer = result.toIntArray()

        return answer
    }
}

fun main(){
    var sol = Solution()
    var result= sol.solution(intArrayOf(95,96,98),intArrayOf(1,1,1))

    for(i in 0..result.size-1){
        println(result[i])
    }
}

 

Kotlin에서 Queue를 사용하는 방법은 여러가지가 있겠지만, 객체는 LinkedList로 생성하고 interface를 Queue로 사용해서 사용해보았다.

 

Queue의 입출력을 다루는 함수에는 대표적으로 add,offer 그리고 poll,peek이 있을 것이다.

 

add와 offer의 차이점은, add는 Queue에 넣을 수 없다면 에러를 출력하고 offer는 false를 출력한다.

 

poll과 peek의 차이점은, poll은 Queue의 데이터를 가져오면서 Queue에서 제거한다. (빼온다)

반면 peek은 Queue에서 데이터를 제거하지 않은 채로 값만 가져온다.

댓글