코딩테스트/C++

[프로그래머스 Level 2] 서버 증설 횟수 (C++)

최-코드 2025. 2. 27. 20:43

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

 

프로그래머스

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

programmers.co.kr

 

 

생각 흐름

  • 시간이 지나면 증설된 서버 개수를 빼줘야 하므로 배열을 하나 만들어 해당 시점이 되면 값을 빼주도록 하기로 결정
  • players 크기를 넘어선 시점에 빼줘야 하는 것을 방지하려 했지만, players의 크기가 최대 24인 것을 보고 배열의 크기를 10000으로 설정하여 크기를 넘어선 시점에 대한 예외 처리 삭제하기로 결정
  • plyers[i]/m의 값과 현재 서버의 개수를 비교해서 players[i]/m의 값이 크면 서버를 증설하기로 결정. 이로 인해 현재 서버의 개수를 저장

 

#include <vector>

using namespace std;

int whenDown[10000];

int solution(vector<int> players, int m, int k) {
    int answer = 0;
    
    int nowServer = 0;
    for(int i = 0; i<players.size(); i++){
        int necessaryServer = players[i]/m;
        if(necessaryServer>nowServer){
            answer+=(necessaryServer-nowServer);
            whenDown[i+k-1]=whenDown[i+k-1]-(necessaryServer-nowServer);
            nowServer=necessaryServer;
        }
        if(whenDown[i]<0){
            nowServer+=whenDown[i];
        }
    }
    
    return answer;
}