문제 풀이/문제 풀이(프로그래머스)

2025 프로그래머스 코드챌린지 2차 예선 > 서버 증설 횟수

풀뿌리 2025. 4. 11. 13:44

문제 위치 : https://school.programmers.co.kr/learn/courses/30/lessons/389479

 

프로그래머스

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

programmers.co.kr

 

이 문제는 항상 최선의 수를 계산하는 그리디 기법으로 풀었다.

 

시간대별로 유저수를 탐색하다가 서버가 더 필요한 경우 최소한 만큼 서버를 증설하는 것이다.

 

아래 코드의 주석대로 서버를 증설할 경우 answer와 current_server에 가산하여 전체 증설 횟수와 각 시간별 서버 갯수를 독립적으로 관리한다.

 

또한, 해당 시간대에 소멸된 서버 갯수를 벡터를 통해 k개 후의 위치에 반영할 수 있도로 하였다.

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> players, int m, int k) {
    int answer = 0;
    int curr_server = 0;
    vector<int> servers(30,0);
    for(int i = 0; i < 24; i++){
        //서버 수와 유저 수 비교
        //서버 증설 할 때 answer 추가, 현재 서버 갯수 추가, 미래에 지울 서버 반영
        curr_server += servers[i];
        
        int capacity = (curr_server+1) * m - 1;
        if(capacity < players[i]){
            int gap = players[i]-capacity;
            int need_more = gap/m;
            if(need_more==0||gap%m>0) need_more++;
            answer += need_more;
            curr_server += need_more;
            servers[i+k] -= need_more;
        }
    }
    return answer;
}