

내가 작성한 코드
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