기초 공부 (언어 및 알고리즘)/알고리즘 (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