250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 자바스크립트
- 태그
- 코딩테스트
- ReactNative
- 코딩
- 자바
- React Native
- javascript
- 프로젝트
- Spring
- 코테
- React
- PCCE
- 오블완
- 백엔드
- node.js
- 파이어베이스
- map
- expo
- 2025 프로그래머스 코드챌린지 2차 예선
- 리액트
- 티스토리챌린지
- controller
- 프로그래머스
- 리액트 네이티브
- 리액트네이티브
- firebase
- java
- project
- 스프링
Archives
- Today
- Total
양갱의 개발 블로그
[프로그래머스] [2025 프로그래머스 코드챌린지 2차 예선] 서버 증설 횟수(Java) 본문
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/389479
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이
1. 증설되어야 하는 서버의 개수를 주기적으로 확인해줘야합니다.
2. 반납 시간(k) 주의 해줘야합니다.
사용자 수 가 m보다 작으면 증설할 필요가 없지만, m보다 크면 몇개가 필요한지 계산해야합니다.
계산 과정을 사용자수 / m으로 하구
Queue에는 반납해야하는 시간을 add나 offer을 해줍니다.
그리고 for문을 돌릴때마다 queue에 들어 있는 서버의 반납시간을 확인하고 넘어가줘야합니다.
초기 코드(오류 많음 - Queue사용 X)
class Solution {
public int solution(int[] players, int m, int k) {
int answer = 0;
// n이 서버 개수? 초기에는 1
// n * m ~ (n+1) * m
// m : 게임 이용자 수
// k : 증설 시간 5시 ~ 10시까지 증설되고 반납
// players는 24시간
int server=0; // 현재 서버
int expansionTime = 0; // 증설되고 종료되는 시간
int expansionServer = 0; // 증설된 서버 개수
for (int i=0; i<players.length; i++){
if(expansionTime != 0 && expansionTime + k <= i) {
expansionTime = 0; // 증설 시간이 종료 되면
server -= expansionServer;
}
System.out.println(i+"시 게임 이용자 수= "+players[i]+" 서버 수= " + server + " answer= "+answer);
if (players[i] < server*m) continue;
if (!(players[i] >= server * m && players[i] < (server + 1) * m)) {
expansionTime = i; // 증설 시작 시간
server = players[i]/m; // 현재 서버
expansionServer = players[i]/m; // 증설된 서버의 수
answer += players[i]/m ; // 증설 횟수
System.out.println("최종 => 게임 증설 횟수= " + players[i]/m +" 이용자 수= "+players[i]+" 서버 수= " + server + " answer= "+answer);
}
}
return answer;
}
}
최종 코드
import java.util.LinkedList;
import java.util.Queue;
class Solution {
public int solution(int[] players, int m, int k) {
int answer = 0;
Queue<Integer> server = new LinkedList<Integer>();
for (int i=0; i<players.length; i++){
int expansionServer = players[i] / m; // 사용자 수 대비 필요한 서버 수
// 반납되어야 하는 시간 확인 후 빼주기
while(!server.isEmpty() && server.peek() <= i){ // 서버의 반납 시간을 확인해줘야합니다.
server.poll();
}
if(expansionServer > server.size()) {
int count = expansionServer-server.size();
for (int n=0; n< count; n++){
server.add(i+k); // 반납해야하는 시간을 queue에 추가
answer ++; // 증가한 개수만큼 answer ++
}
}
System.out.println(i+"시간 : queue => "+server + " 서버 개수= "+server.size() +" expansionServer= "+ expansionServer);
}
return answer;
}
}
728x90
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.1 추억 점수(Java) (0) | 2025.03.29 |
---|---|
[프로그래머스] [PCCE 기출문제] 10번 / 데이터 분석(Java) (0) | 2025.03.29 |
[프로그래머스] [2025 프로그래머스 코드챌린지 2차 예선] 유연근무제(Java) (0) | 2025.03.27 |
[프로그래머스] [2025 프로그래머스 코드챌린지 2차 예선] 택배 상자 꺼내기(Java) (0) | 2025.03.25 |
[프로그래머스] [PCCE 기출문제] 9번 / 이웃한 칸 (Java) (0) | 2024.11.16 |