https://school.programmers.co.kr/learn/courses/30/lessons/389479
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
코딩테스트 연습 > 2025 프로그래머스 코드챌린지 2차 예선 > 서버 증설 횟수
난이도: LEVEL2
알고리즘 유형: 구현?
문제 접근
우선순위 큐에 증설된 서버를 넣어준다.
우선순위 큐는 int [] 배열을 가진다.
int [0] = 서버의 만료 시간 (서버 증설 시간 + k) int [1] = 증설된 서버의 개수
우선순위 큐는 만료 시간이 빠른 순서대로 정렬한다
players 배열 (0 ~ 23) for문을 돌면서 증설된 서버가 만료되면 내려주고 서버의 개수가 부족하면 늘려준다.
그리고 count 변수에 서버 증설 횟수를 기록한다.
주석에 변수의 의미와 각 동작을 설명했으니 금방 이해할 것이다!
오토 스케일 아웃 알고리즘을 구현한 느낌..?
정답 코드
import java.util.*;
class Solution {
public int solution(int[] players, int m, int k) {
PriorityQueue<int[]> pq = new PriorityQueue<>((o1,o2) -> o1[0] - o2[0]);
int size = 0; // 현재 서버의 개수
int count = 0; // 증설된 서버 횟수
for(int i = 0; i < 24; i++){
// 만료된 서버 내리기
while(!pq.isEmpty() && pq.peek()[0] == i){
size -= pq.poll()[1];
}
int need = players[i] / m; // 현재 필요한 서버의 개수
int more = size - need; // - 서버 증설 개수
if(more < 0){
more = -more;
size += more;
count += more;
pq.add(new int []{i + k, more});
}
}
return count;
}
}

'Algorithm > Programmers Java' 카테고리의 다른 글
[JAVA] 프로그래머스 LEVEL2 지게차와 크레인 (0) | 2025.02.18 |
---|---|
[JAVA] 프로그래머스 LEVEL2 완전범죄 (2) | 2025.02.17 |
[JAVA] 프로그래머스 LEVEL2 N-Queen (0) | 2024.11.25 |
[JAVA] 프로그래머스 LEVEL2 최댓값과 최솟값 (0) | 2024.11.22 |
[JAVA] 프로그래머스 LEVEL2 최솟값 만들기 (0) | 2024.11.22 |