

-Code
import java.util.*;
class Solution {
static class Server {
int startTime, cnt, operateTime;
public Server (int startTime, int cnt, int operateTime) {
this.startTime = startTime;
this.cnt = cnt;
this.operateTime = operateTime;
}
// 종료된 서버인지 확인
public boolean isClose (int time) {
return startTime + operateTime <= time;
}
}
public int solution(int[] players, int m, int k) {
Deque<Server> colseTimes = new ArrayDeque<>();
int answer = 0;
int serverCnt = 0;
for (int i = 0; i < 24; i++) {
// 운영 시간이 끝난 서버가 있는지 확인
if (!colseTimes.isEmpty() && colseTimes.peekFirst().isClose(i)) {
// 운영 시간 끝난 서버 제거
Server closeServer = colseTimes.pollFirst();
serverCnt -= closeServer.cnt;
}
// 서버 증설해야 하는지 확인
int playerCnt = players[i];
int needServer = playerCnt / m;
// 필요 서버가 현재 서버보다 많은 경우
if (needServer > serverCnt) {
// 열린 서버 차이만큼 추가
int serverGap = (needServer - serverCnt);
serverCnt += serverGap;
colseTimes.addLast(new Server(i, serverGap, k));
answer += serverGap;
}
}
return answer;
}
}
처음에 서버 증설 확인 후 제거로 로직을 짰으나 틀렸습니다. 그래서 찾아보니 제거를 하고 추가해야 하는데 반대로 하여 해당 시간에 추가를 안 하고 넘어가는 경우가 생겨서 증설 횟수가 꼬인 문제였습니다. 그래서 if문의 위치를 바꾸니 해결되었습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [프로그래머스/Java] 큰 수 만들기 (0) | 2026.04.09 |
|---|---|
| [백준/Java] 34386번 Tic-Tac-Toe AI (0) | 2026.04.08 |
| [백준/Java] 33278번 나무와 그림자 easy (0) | 2026.04.07 |
| [프로그래머스/Java] 2개 이하로 다른 비트 (0) | 2026.04.06 |
| [백준/Java] 24035번 Impartial Offerings (0) | 2026.04.06 |