[programmers/js] 서버 증설 횟수

승민·2025년 3월 3일

알고리즘

목록 보기
137/171

서버 증설 횟수

https://school.programmers.co.kr/learn/courses/30/lessons/389479?language=javascript

문제 설명

어느 시간대의 이용자가 m명 미만이라면, 서버 증설이 필요하지 않습니다. 어느 시간대의 이용자가 n x m명 이상 (n + 1) x m명 미만이라면 최소 n대의 증설된 서버가 운영 중이어야 합니다. 한 번 증설한 서버는 k시간 동안 운영하고 그 이후에는 반납합니다. 예를 들어, k = 5 일 때 10시에 증설한 서버는 10 ~ 15시에만 운영됩니다.

하루 동안 모든 게임 이용자가 게임을 하기 위해 서버를 최소 몇 번 증설해야 하는지 알고 싶습니다. 같은 시간대에 서버를 x대 증설했다면 해당 시간대의 증설 횟수는 x회입니다.

0시에서 23시까지의 시간대별 게임 이용자의 수를 나타내는 1차원 정수 배열 players, 서버 한 대로 감당할 수 있는 최대 이용자의 수를 나타내는 정수 m, 서버 한 대가 운영 가능한 시간을 나타내는 정수 k가 주어집니다. 이때, 모든 게임 이용자를 감당하기 위한 최소 서버 증설 횟수를 return 하도록 solution을 완성해 주세요.

풀이

문제에 대해 생각해보면, 현재 시간에 필요한 서버 수, 각 시간대 별 생성된 서버 수 이 두 가지 값을 비교해 해결할 수 있습니다.

function solution(players, m, k) {
    if (k === 1) return players.reduce((a, c) => a + Math.trunc(c / m), 0);
    
    // 시간대 별 서버 정보
    const servers = Array(24).fill(0);
    let result = 0;
    
    players.map((p , time) => {
        const need = Math.trunc(p / m); // 현재 필요한 서버 수
       
        if (need > servers[time]) {
            const addServer = need - servers[time];
            
            for (let i = 0; i < k; i++) {
                if (time + i <= 23) {
                    servers[time + i] += addServer;
                }
            }
            
            result += addServer;
        }
    })
    return result;   
}

0개의 댓글