문제 설명
당신은 온라인 게임을 운영하고 있습니다. 같은 시간대에 게임을 이용하는 사람이 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 첨 봤는데요. 나눠서 딱 안 떨어지면 올림하는 거라고 합니다
기억해뒀다가 나중에 쓸 일 있으면 꼭 써야겠네요...
'프로그래머스' 카테고리의 다른 글
| [프로그래머스] 유연근무제 (1) | 2025.07.21 |
|---|---|
| [프로그래머스] 특정 형질을 가지는 대장균 찾기 (0) | 2025.07.17 |
| [프로그래머스] 택배 상자 꺼내기 (1) | 2025.07.17 |