기초 공부 (언어 및 알고리즘)/알고리즘 (C언어)

[프로그래머스 / C언어] 서버 증설 횟수

iinana 2025. 2. 18. 18:45
728x90

프로그래머스 서버 증설 횟수 문제를 C언어로 풀어보았다.

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

 

프로그래머스

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

programmers.co.kr

 

 

어렵지 않은 문제이므로, 간단한 로직만 기록하려 한다.

servers 배열에, 각 시간대(index) 별로 증설된 서버 개수를 저장한다. cur_server은 현재 운영 중인 서버의 개수이다. 사용자의 수를 담은 players 배열을 순회하며, 현재 서버가 감당할 수 있는 사용자 수(cur_server * m) 이상의 사용자가 있는 경우 서버를 증설해 준다. 또한, 증설된 서버의 지속 시간은 k 이므로 k 시간 전에 증설된 서버의 개수(server[i-k]에 저장된 서버의 개수)만큼 현재 운영 중인 서버의 개수에서 빼주어야 한다.

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

// players_len은 배열 players의 길이입니다.
int solution(int players[], size_t players_len, int m, int k) {
    int answer = 0;
    int* servers = (int*)calloc(players_len, sizeof(int));
    int cur_server = 1;
    
    for (int i = 0; i < players_len; i++) {
        if (i >= k) cur_server -= servers[i-k];
        while (players[i] >= (cur_server + servers[i]) * m)
            servers[i]++;
        answer += servers[i];
        cur_server += servers[i];
    }
    
    return answer;
}
728x90