프로그래머스

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

끊임없이 개발하는 새럼 2025. 7. 25. 16:49

문제 설명

당신은 온라인 게임을 운영하고 있습니다. 같은 시간대에 게임을 이용하는 사람이 m명 늘어날 때마다 서버 1대가 추가로 필요합니다. 어느 시간대의 이용자가 m명 미만이라면, 서버 증설이 필요하지 않습니다. 어느 시간대의 이용자가 n x m명 이상 (n + 1) x m명 미만이라면 최소 n대의 증설된 서버가 운영 중이어야 합니다. 한 번 증설한 서버는 k시간 동안 운영하고 그 이후에는 반납합니다. 예를 들어, k = 5 일 때 10시에 증설한 서버는 10 ~ 15시에만 운영됩니다.

하루 동안 모든 게임 이용자가 게임을 하기 위해 서버를 최소 몇 번 증설해야 하는지 알고 싶습니다. 같은 시간대에 서버를 x대 증설했다면 해당 시간대의 증설 횟수는 x회입니다.

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

class Solution {
    public int solution(int[] players, int m, int k) {
        
        int createServer = 0; // 증설된 서버 수
		int serverCount = 0; // 현재 서버 수
		int userCount = 0; // 수용 인원 수
		int user = 0;
        int answer = 0;
        
        List<Map<Integer, Integer>> result = new ArrayList<>();
        
        for (int i = 0; i < players.length; i++) {
            Map<Integer, Integer> data = new HashMap<>();
            
            if (i >= k) {
                serverCount -= result.get(i - k).get(2);
            }
            
            userCount = (m * serverCount) + m-1;
            if (userCount < players[i]) {
                user = players[i] - (m * serverCount);
				createServer = user / m; // 시간당 증설 수
				serverCount += createServer;
				data.put(1, i);
				data.put(2, createServer);
				result.add(data);
				answer += createServer;
				createServer = 0;
            } else {
                data.put(1, i);
                data.put(2, 0);
                result.add(data);
                createServer = 0;
            }
        }
    
			
        return answer;
    }
}

저는 Map 을 썼는데, 다른 분들 풀이보니까... 너무 간단하게 푸시는 것 같습니다... ㅎㅎ

그냥 Math 함수로 한번에 하시는 분도 봤음

Math.ceil 첨 봤는데요. 나눠서 딱 안 떨어지면 올림하는 거라고 합니다

기억해뒀다가 나중에 쓸 일 있으면 꼭 써야겠네요...