https://school.programmers.co.kr/learn/courses/30/lessons/389479#
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
비교적 최근 문제라서 그런지 다른 사람의 풀이를 보기 쉽지 않아 직접 남겨보는 글이다.- 추후 코드 수정이 필요할 수 있습니다
- 코드 풀이 과정 -
- currentTime으로 현재 시각을 나타내며 24시간까지 루프를 돌리는 방식
- 서버는 일정 시간의 증설 시간 이후로 삭제된다. (Queue로 구현해 만료되면 Poll로 없애주는 방식)
- 현재 수용할 수 있는 사용자(availableCapacity)와 현 시간의 사용자(player)를 비교하여 서버 증설 여부를 결정한다.
- 실제로 필요한 값은 서버 증설이 몇대나 이루어졌는지 이므로 서버 증설할 때 answer에 추가해준다.
public int solution(int[] players, int m, int k) {
int answer = 0;
int currentTime = 0;
Queue<Integer> serverExpire = new LinkedList<>();
while (currentTime < players.length) {
while (!serverExpire.isEmpty() && serverExpire.peek() < currentTime) {
serverExpire.poll();
}
int player = players[currentTime];
int currentServerCnt = serverExpire.size();
int availableCapacity = (currentServerCnt + 1) * m;
if (player >= availableCapacity) {
int addServerCnt = ((player - availableCapacity) / m) + 1;
answer += addServerCnt;
for (int i = 0; i < addServerCnt; i++) {
serverExpire.offer(currentTime + k - 1);
}
}
currentTime++;
}
return answer;
}'알고리즘 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스][JAVA] Lv.2 / 행렬 테두리 회전하기 (0) | 2025.03.17 |
|---|