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;
}