[Java] 프로그래머스 / 서버 증설 횟수

개미개미개·2025년 3월 24일

Algorithm

목록 보기
34/63

서버 증설 횟수

문제


문제 설명

사용자들의 수가 0시부터 24시까지 주어질때 필요한 서버의 개수를 구하는 문제이다. 문제에서 주어지는 조건은 사람이 m명 이상일 때부터 서버가 1개씩 늘어나고 해당 서버는 k시간 후에 없어진다는 조건이다.


구현

일단 첫번째로 현재 인원수를 기준으로 필요한 서버수를 계산해주어야 한다.
m 명을 기준으로 서버가 몇개나 필요한지 계산을 해주어야 한다.

//현재 필요한 서버 수 계산
int needServer = 0;

if(players[i] >= m){
	if(players[i] % m == 0){
		needServer += ((players[i] - m) / m) + 1;
	}
	else
    	needServer += ((players[i] - m) / m) + 1;
}

위 코드와 같이 m명일때는 따로 서버 증설이 필요하지 않기 때문에 players[i] - m 을 기준으로 계산을 해주었다.

두번째로는 현재 가용가능한 서버의 개수를 세주기로 했다.
현재 시간을 기준으로 가용가능한 서버의 개수는 아래와 같이 계산했다.

//현재 가용가능한 서버 개수 구하기
int serverCount = 0;
for(int j = Math.max(0, i - k + 1); j < i; j++){
	serverCount += server[j];
}

마지막으로 필요한 서버의 개수를 세주면 된다.
위에서 계산한 것들로현재 필요한 서버 - 현재 가용가능한 서버 를 구하고 해당 값을 servers[i] 에 넣어주고 그만큼 증설했다고 정답인 answer에 더해주었다.

//필요한 서버 수 계산
int add = Math.max(0, needServer - serverCount);
server[i] = add;
answer += add;

코드

class Solution {
    static int[] server;
    //사람 명수 m, 서버 지속 시간 k
    public int solution(int[] players, int m, int k) {
        int answer = 0;
        server = new int[24];
        for(int i = 0; i < 24; i++){
            //현재 필요한 서버 수 계산
            int needServer = 0;
            if(players[i] >= m){
                if(players[i] % m == 0){
                    needServer += ((players[i] - m) / m) + 1;
                }
                else needServer += ((players[i] - m) / m) + 1;
            }
            
            //현재 가용가능한 서버 개수 구하기
            int serverCount = 0;
            for(int j = Math.max(0, i - k + 1); j < i; j++){
                serverCount += server[j];
            }
            
            //필요한 서버 수 계산
            int add = Math.max(0, needServer - serverCount);
            server[i] = add;
            answer += add;
            
            System.out.println(i + " ~ " + (i + 1) + "시 이용자수: " + players[i]
                    + ", 필요 서버: " + needServer + ", 가동 중 서버: " + serverCount
                    + ", 추가 서버: " + add);
        }
        return answer;
    }
}
profile
개미는 오늘도 일을 합니다.

0개의 댓글