[프로그래머스] 서버 증설 횟수 (C++)
[프로그래머스] 서버 증설 횟수 (C++)
프로그래머스 서버 증설 횟수
📝 문제 요약
m명 늘어날때마다 서버 한대 증설증설된 서버는
k시간 만큼만 운영증설된 서버가 몇개인지 리턴하면 통과
✅ 코드 설명
1
2
3
int n = 0;
int answer = 0;
queue<vector<int>> servers;
n은 현재 증설된 서버개수를 의미한다.answer는 이때까지 증설됐던 서버개수 답 제출을 위한 변수.servers는{증설된 서버개수, 반납 시간}으로 이루어진 배열을 여러개 저장하기위한 queue를 선언하였다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for (int i = 0; i < 24; ++i) {
if (!servers.empty()) {
vector<int>& server = servers.front();
if (server[1] == i) {
n -= server[0];
servers.pop();
}
}
int n_need = players[i] / m - n;
if (n_need > 0) {
answer += n_need;
n += n_need;
servers.push({n_need, i + k});
}
}
return answer;
i는i ~ i + 1시간을 의미하니까i = 23까지만 루프servers가 비어있는지 체크하고, 제일 먼저 빌린 서버 증설내역을 갖고오고반납 시간이 다 되었다면 반납해야하는 서버개수 만큼
n에서 빼고servers.pop()으로 서버 증설내역을 삭제필요한 서버개수를
players[i] / m - n으로 구한다.i ~ i + 1시간에 접속할 이용자수 / 증설에 필요한 인원 - 현재 서버증설 개수필요한 서버개수가 0보다 많을경우
n과answer에 증설 서버개수를 기록하고 서버 증설내역에도{증설된 서버개수, 반납 시간}을 추가루프가 끝나면 0~24시까지 증설했던 서버 총 개수를 담은
answer를 리턴
전체코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <string>
#include <vector>
#include <queue>
using namespace std;
int solution(vector<int> players, int m, int k) {
int n = 0;
int answer = 0;
queue<vector<int>> servers;
for (int i = 0; i < 24; ++i) {
if (!servers.empty()) {
vector<int>& server = servers.front();
if (server[1] == i) {
n -= server[0];
servers.pop();
}
}
int n_need = players[i] / m - n;
if (n_need > 0) {
answer += n_need;
n += n_need;
servers.push({n_need, i + k});
}
}
return answer;
}
This post is licensed under CC BY 4.0 by the author.