이 문제는 예제를 꼼꼼히 들여다 봐야 된다.
이용자수가 m명 늘어날때마다 서버 1대가 추가로 필요하고 m 명 미만은 서버를 증설하지 않는다.
한 번 증설한 서버는 k시간 동안 운영하고 그 이후에는 반납한다. 따라서 시간대별 운영중인 서버의 개수를 세기 위해 map을 선언했다.
예를 들어, 사용자 수가 13명인데 이미 전에 증설한 서버가 해당 시간대에 x개 존재한다고 하면 13/m - x 개의 서버를 새로 증설해야한다.
사용자 수: 13, m: 3, x: 1
이면 원래는 13/3인 4개의 서버를 증설해야하는게 맞지만, 일전에 증설해놓은 서버 1대가 아직 운영중이므로 새롭게 3개의 서버만 더 증설하면 된다.
이 과정을 이해하면 문제를 바로 풀 수 있다.
#include <string>
#include <vector>
#include <map>
#include <iostream>
using namespace std;
map<int, int> mp;
int solution(vector<int> players, int m, int k) {
int answer = 0;
for(int i=0; i<players.size(); i++) {
if (players[i]/m > 0) {
int tmp = players[i]/m-mp[i];
if (tmp <= 0) continue;
for(int j=i; j<i+k; j++) {
mp[j]+=tmp;
}
answer+=tmp;
}
}
return answer;
}