문제
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이
서버는 시작시간, 끝난시간, 서버의 개수를 기록해야한다.
우선순위 큐를 사용해서 끝난 시간에 대해 오름차순 정렬을 해서, 끝나는 시간이 빠른 서버가 우선순위를 높게한다.
현재 시간과 끝나는 시간이 같으면, 서버를 빼버리고, 설치한 서버의 수만큼 서버의 개수를 감소시킨다.
서버의 필요한 개수와 증설 횟수를 구한다.
소스코드
import java.util.*;
class Solution {
private static class Server {
int start;
int end;
int cnt;
Server(int start, int end, int cnt) {
this.start = start;
this.end = end;
this.cnt = cnt;
}
}
public int solution(int[] players, int m, int k) {
int serverCnt = 0;
int increCnt = 0;
PriorityQueue<Server> pq = new PriorityQueue<Server>((s1, s2) -> {
return s1.end - s2.end;
});
for (int t = 0; t < players.length; t++) {
//서버를 모두 가용했을 경우, 없애고, 서버 개수를 감소
if (!pq.isEmpty() && pq.peek().end == t) {
Server s = pq.remove();
serverCnt -= s.cnt;
}
//게임 이용자의 수
int num = players[t];
//서버가 필요한 개수
int needCnt = (num / m) - serverCnt;
//서버가 필요한 경우,
if (needCnt > 0) {
pq.add(new Server(t, t + k, needCnt));
//현재 서버의 개수
serverCnt += needCnt;
//증설 횟수
increCnt += needCnt;
}
}
return increCnt;
}
}'Problem Solving > Programmers' 카테고리의 다른 글
| [Programmers] n보다 커질 때까지 더하기 - Java (0) | 2025.05.05 |
|---|---|
| [Programmers] 체육복 - Java (0) | 2025.05.04 |
| [Programmers] 뒤에 있는 큰 수 찾기 - Java (0) | 2025.03.24 |
| [Programmers] 숫자 변환하기 - Java (0) | 2025.03.23 |
| [Programmers] 크기가 작은 부분문자열 - Java (0) | 2025.03.19 |