[JAVA 문제 풀이] 370. 서버 증설 횟수

프로그래머스 (389479)
Stupefyee's avatar
Jul 09, 2025
[JAVA 문제 풀이] 370. 서버 증설 횟수
notion image
notion image
 

내가 작성한 코드

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

stupefyee