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

삼식이·2025년 7월 9일
0

알고리즘

목록 보기
73/81

서버 증설 횟수

이 문제는 예제를 꼼꼼히 들여다 봐야 된다.

이용자수가 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;
}

0개의 댓글