코드몽키

[프로그래머스] Lv.2 - 서버 증설 횟수 본문

Coding Test

[프로그래머스] Lv.2 - 서버 증설 횟수

wawa93 2025. 9. 26. 16:48

문제링크

https://school.programmers.co.kr/learn/courses/30/lessons/389479

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr



문제 해결 아이디어

문제를 보자마자 어떠한 자료구조에 서버를 담을 지 고민하였다. 처음에 먼저 들어온 서버가 항상 먼저 제거가 됨으로 큐를 사용하였다. 반복 되는 시간으로 서버의 증설 유무를 판단하여 큐에 적재했고 큐에 증설된 서버의 만료시간을 부여하여 시간이 만료되었을때 서버를 제거 하였다.



코드

class Solution {

    fun solution(players: IntArray, m: Int, k: Int): Int {
        var answer: Int = 0
        val queue: ArrayDeque<Int> = ArrayDeque()

        players.forEachIndexed { t, userCnt ->
            val needServer = userCnt / m
            val currentServer = queue.size

            //현재 서버수 와 필요한 서버수를 비교하여 필요하면 서버 증설 하도록 처리
            if (currentServer < needServer) {
                val s = needServer - currentServer //서버 추가 횟수
                if (s > 0) {
                    repeat(s) {
                        // 만료 시간 기록해서 큐에 적제
                        queue.add(t + k)
                        if(k == 1) { queue.removeFirst() } // 만료 시간 기록
                        answer++
                    }
                }
            }

            while (queue.isNotEmpty() && queue.first() <= t + 1) {
                queue.removeFirst()
            }
        }
        return answer
    }
}