

내가 작성한 코드
class Solution {
public int solution(int[] players, int m, int k) {
int answer = 0; // 서버 증설 횟수
int[] servers = new int[players.length]; // 시간대 별 서버수를 담을 배열
for(int i = 0; i < players.length; i++) {
int player = players[i]; // 현재 플레이어 수
int server = servers[i]; // 현재 서버 수
int capacity = (server + 1) * m; // 현재 서버의 최대 수용 인원
// 서버 수용 인원이 모자라면 서버 증설
if (player >= capacity) {
int need = (int) Math.floor((player - capacity) / m) + 1;
answer += need; // 모자란 서버 수 만큼 증설 횟수 증가
// 서버 유지 시간 k 동안 서버 수를 증가시킴
for(int j = i; j < players.length && j < i + k; j++) {
servers[j] += need; // 서버 증설
}
}
}
return answer;
}
}
다른 사람의 코드
class Solution {
public int solution(int[] players, int m, int k) {
int ans = 0;
int active = 0;
int[] install = new int[24]; // 각 시간대에 설치된 서버 수
for (int i = 0; i < 24; i++) {
// 서버 유지 시간 k가 지나면 해당 시간대의 서버 수를 감소
if (i >= k) {
active -= install[i - k];
}
int req = players[i] / m; // 현재 시간에 필요한 서버 수
if (active < req) { // 현재 활성화된 서버 수가 필요한 서버 수보다 적으면
int add = req - active; // 추가로 필요한 서버 수 계산
ans += add; // 서버 증설 횟수 증가
active += add; // 활성화된 서버 수 증가
install[i] = add; // 현재 시간대에 설치된 서버 수 기록
}
}
return ans;
}
}
Share article