우당탕탕 개발일지
[프로그래머스] 서버 증설 횟수 (Lv.2, Java) 본문
반응형
문제
같은 시간대에 게임을 이용하는 사람이 m명 늘어날 때마다 서버 1대가 추가로 필요
k = 5 일 때 10시에 증설한 서버는 10 ~ 15시에만 운영됩니다.
입출력 예
풀이
나는 큐에 삭제할 시간과 개수를 저장해서 관리했다.
answer: 결과값
serverCount: 현재 서버 개수
timeQueue: {삭제한 시간, 개수}
1. 서버 증설해야 하는 경우
조건1. 기준 인원보다 접속인원이 이상일 경
조건2. 필요한 서버 수보다 현재 서버 수가 적을 경우
해당 조건에 충족하면 증설 회수와 서버 개수 설정한다.
그리고 나중에 서버가 삭제 시 필요한 정보를 Queue에 저장한다.
2. 서버 삭제해야 하는 경우
조건1. 삭제 정보가 있는 경우
조건2. 삭제 시간이 되었을 경우
조건을 충족하면 서버 개수를 재설정 후, 해당 삭제 정보를 큐에서 제거한다.
* 항상 먼저 들어온 원소가 가장 빠른 시간에 삭제됨으로 우선순위 큐를 사용하지 않았다. 확장성 생각하면 우선순위가 더 좋을지두?
코드
public int solution(int[] players, int m, int k) {
int answer = 0;
int serverCount = 0; // 서버 개수
Queue<int[]> timeQueue = new LinkedList<int[]>(); // 삭제할 시간, 삭제할 개수
for(int i=0; i< players.length; i++) {
System.out.println("i = " + i + " & server count = " + serverCount);
// 서버 삭제 개수 설정
if(timeQueue.size() > 0 && timeQueue.peek()[0] == i) {
serverCount -= timeQueue.peek()[1];
timeQueue.poll();
}
// 서버 증설해야 하는 경우
int c = players[i] / m; // 필요한 서버 수
if(players[i] >= m && c > serverCount) {
answer += (c-=serverCount);
serverCount += c;
System.out.println(">> c = " + c + " & i+k = " + (i+k));
timeQueue.add(new int[]{i + k, c});
}
}
return answer;
}
프로그래머스 문제
https://school.programmers.co.kr/learn/courses/30/lessons/389479
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
반응형
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 택배 상자 꺼내기 (Lv.1, Java) (1) | 2025.03.21 |
---|---|
[프로그래머스] 정수를 나선형으로 배치하기(Java, Level.0) (1) | 2025.03.17 |
[프로그래머스] 더 맵게(Java, Level.2) (1) | 2025.02.10 |
[프로그래머스] 프로세스 (Java, Level.2) (1) | 2025.02.04 |
[프로그래머스] 장균의 크기에 따라 분류하기 1 (MySQL, Level.3) (0) | 2025.02.04 |