DEV/코딩테스트

[프로그래머스] 서버 증설 횟수

9thxg 2025. 4. 7. 11:06

 

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

 

프로그래머스

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

programmers.co.kr

제한사항

players의 길이 = 24
0 ≤ players의 원소 ≤ 1,000
players[i]는 i시 ~ i+1시 사이의 게임 이용자의 수를 나타냅니다.
1 ≤ m ≤ 1,000
1 ≤ k ≤ 24

 

제한사항을 보았을 때 수가 크지 않아 어떤 알고리즘도 채택이 가능하다고 생각했음

 

문제 예시를 확인하고 서버가 증설됐을 때 시간을 가지고 있는 배열을 통해 현재 서버의 개수를 확인하고 관리할 수 있겠다 생각함

 

필요한 서버의 개수는 현재 플레이어 수에서 m을 나눈 몫으로 계산함

 

반복문의 최상단에서는 현재 인덱스 기준으로 운영 시간이 지난 server 필터링 진행

 

이후 필요한 서버 수에 현재 인덱스 기준 서버 수를 빼서 증설할 서버 개수를 구함

 

server 필터링 진행 시 it + k >= idx로 계산하여 대부분의 테스트 케이스를 통과하지 못했음, it + k > idx와 같이 서버의 생성 인덱스에 운영시간을 더한 값이 현재 인덱스보다 큰 값이어야 함

function solution(players, m, k) {
    var answer = 0;
    
    let server = [];
    
    players.forEach((count, idx) => {
        const filterServer = server.filter(it => it + k > idx);
                
        const needServer = Math.floor(count / m);
        
        const addServer = needServer - filterServer.length;
        
        if(addServer > 0){
            for(let i = 0; i < addServer; i++){
                filterServer.push(idx);
                answer++;
            }
        }
        
        server = filterServer.slice();
    })
    
    return answer;
}