레벨2 > 2025년 프로그래머스 코드챌린지 2차 예선 > 서버 증설 횟수
사용 언어 : Java
문제 요약
- 이용자가 m명 늘어날 때마다 서버 1대가 추가로 필요
- 이용자가 m명 미만이면 서버가 필요하지 않음
- 이용자가 n×m명 이상 (n+1)×m명 미만이면 n대의 서버가 필요
- 서버는 증설한 후 k시간 동안만 운영
- 모든 게임 이용자를 감당하기 위한 최소 서버 증설 횟수를 찾아야 함
- 변수
players : 0시에서 23시까지의 시간대별 게임 이용자의 수를 나타내는 1차원 정수 배열
m : 서버 한 대로 감당할 수 있는 최대 이용자의 수
k : 서버 한 대가 운영 가능한 시간을 나타내는 정수
제한 사항
- players 길이 : 24
- 0 <= players 각 원소 <= 1000
- players[i] : i 시 ~ (i + 1) 시 사이의 이용자 수
- 1 <= m <= 1000
- 1 <= k <= 24
문제 접근 방향
- 각 시간대별로 필요한 서버 수 계산
- 0시부터 23시까지 순차적으로 처리
현대 시간에 운영 중인 서버 계산
필요한 서버 수에서 이미 운영 중인 서버 수를 뺀 만큼 추가로 서버 증설
증설 횟수 누적
문제 풀이
더보기
public int solution(int[] players, int m, int k) {
int n = players.length; // 24시간
int[] serversNeeded = new int[n]; // 각 시간대별 필요한 서버 수
// 각 시간대별 필요한 서버 수 계산
for (int i = 0; i < n; i++) {
if (players[i] < m) {
serversNeeded[i] = 0; // m명 미만이면 서버 불필요
} else {
serversNeeded[i] = (players[i] / m); // n×m명 이상 (n+1)×m명 미만이면 n대 필요
}
}
int totalExpansions = 0;
int[] activeServers = new int[n]; // 각 시간대별 증설한 서버 수
// 각 시간대별로 처리
for (int time = 0; time < n; time++) {
// 필요한 서버 수
int need = serversNeeded[time];
// 이미 운영 중인 서버 수 (time-k+1부터 time-1까지 증설한 서버들)
int running = 0;
for (int t = Math.max(0, time - k + 1); t < time; t++) {
running += activeServers[t];
}
// 추가로 필요한 서버 수
int additional = Math.max(0, need - running);
// 추가 서버 증설
if (additional > 0) {
activeServers[time] = additional;
totalExpansions += additional;
} else {
activeServers[time] = 0;
}
}
return totalExpansions;
}
풀이 설명
더보기
- 필요한 서버 수 계산:
- players[i] < m인 경우: 서버가 필요 없음 (0대)
- 그 외 경우: players[i] / m대의 서버 필요 (정수 나눗셈)
- 각 시간대별 서버 운영 및 증설:
- activeServers 배열은 각 시간대에 증설한 서버 수를 저장
- 현재 시간 time에 운영 중인 서버는 time-k+1부터 time-1까지 증설한 서버들
- 필요한 서버 수 need에서 이미 운영 중인 서버 수 running을 뺀 값이 추가로 필요한 서버 수 additional
- 추가 서버가 필요하면 증설하고 증설 횟수에 누적
'알고리즘 > Programmers' 카테고리의 다른 글
[Programmers/Python] 추억 점수 (0) | 2024.11.17 |
---|---|
[Programmers/Python] [PCCP 기출문제] 2번 / 퍼즐 게임 챌린지 (2) | 2024.11.09 |
[Programmers/Python] 달리기 경주 (0) | 2024.11.09 |
[Programmers/Python] [PCCE 기출문제] 10번 / 데이터 분석도움말 (0) | 2024.11.09 |