๐ ๋ฌธ์ ๋งํฌ
์๋ฒ ์ฆ์ค ํ์
์ฝ๋ฉํ
์คํธ ์ฐ์ต - ์๋ฒ ์ฆ์ค ํ์ ๋ฌธ์ ์
๋๋ค.
๐ก ๋ฌธ์ ํ์
- 0์๋ถํฐ 23์๊น์ง ์๊ฐ๋๋ณ ์ด์ฉ์ ์
players๊ฐ ์ฃผ์ด์ง๋ค. - ์๋ฒ ํ ๋๋ ์ด์ฉ์
m๋ช ์ ๊ฐ๋นํ ์ ์๊ณ , ํ ๋ฒ ์ฆ์คํ๋ฉดk์๊ฐ ๋์ ์ด์๋ ๋ค ์๋์ผ๋ก ๋ฐ๋ฉ๋๋ค. - ๊ฐ ์๊ฐ๋๋ง๋ค
(์ด์ ์ค์ธ ์๋ฒ ์) x m์ด ํด๋น ์๊ฐ๋ ์ด์ฉ์ ์๋ณด๋ค ๋ง๊ฑฐ๋ ๊ฐ์์ง ๋๊น์ง ์๋ฒ๋ฅผ ์ฆ์คํด์ผ ํ๋ฉฐ, ํ๋ฃจ ๋์ ํ์ํ ์ต์ ์ฆ์ค ํ์๋ฅผ ๊ตฌํด์ผ ํ๋ค.
๐๏ธ ์ ๊ทผ ๋ฐฉ๋ฒ
- 0์๋ถํฐ 23์๊น์ง ์์๋๋ก ์๋ฎฌ๋ ์ด์ ํ๋ฉด์, ๊ฐ ์๊ฐ๋์ ๋ฐ๋ฉ๋๋ ์๋ฒ์ ์๋ก ์ฆ์คํด์ผ ํ๋ ์๋ฒ๋ฅผ ์ฒ๋ฆฌํ๋ค.
- ์ฆ์ค๋ ์๋ฒ์ ๋ฐ๋ฉ ์๊ฐ(
time + k)์ ํ์ ์ ์ฅํด๋๊ณ , ๋งค ์๊ฐ๋ ์์๋ง๋ค ํ์ ๋งจ ์๋ถํฐ ํ์ธํด์๋ฐ๋ฉ ์๊ฐ <= ํ์ฌ ์๊ฐ์ธ ์๋ฒ๋ฅผ ํ์์ ์ ๊ฑฐํ๊ณ ์ด์ ์ค์ธ ์๋ฒ ์๋ฅผ ์ค์ธ๋ค.- ํ์ ๋ฐ๋ฉ ์๊ฐ์ ์ค๋ฆ์ฐจ์์ผ๋ก ๋ฃ๊ธฐ ๋๋ฌธ์ ๋งจ ์๋ง ํ์ธํด๋ ๋ฐ๋ฉ ๋์์ ๋ชจ๋ ์ฒ๋ฆฌํ ์ ์๋ค.
- ๋ฐ๋ฉ ์ฒ๋ฆฌ ํ,
์ด์ ์ค์ธ ์๋ฒ ์ x m์ด ํ์ฌ ์ด์ฉ์ ์ ์ดํ์ธ ๋์ ์๋ฒ๋ฅผ ํ ๋์ฉ ์ฆ์คํ๋ค.- ์ฆ์คํ ๋๋ง๋ค ๋ฐ๋ฉ ์๊ฐ์ ํ์ ๋ฃ๊ณ , ์ด์ ์ค์ธ ์๋ฒ ์์ ์ ์ฒด ์ฆ์ค ํ์๋ฅผ 1์ฉ ๋๋ฆฐ๋ค.
- 24๊ฐ ์๊ฐ๋๋ฅผ ๋ชจ๋ ์ํํ ๋ค ๋์ ๋ ์ฆ์ค ํ์๋ฅผ ๋ฐํํ๋ค.
๐งฉ ์ฝ๋ ๊ตฌํ
import java.util.*;
class Solution {
public int solution(int[] players, int m, int k) {
Queue<Integer> serverQ = new ArrayDeque<>();
int runningServers = 1;
int expansionCnt = 0;
for (int time = 0; time <= 23; ++time) {
int users = players[time];
// ํ์ฌ ์๊ฐ๋์ ๋๋๋ ์๋ฒ ์ ๊ฑฐํ๊ธฐ
while (!serverQ.isEmpty() && serverQ.peek() <= time) {
serverQ.poll();
runningServers--;
}
// ํ์ฌ ์๋ฒ๋ก ์ ์ ๊ฐ๋น ๊ฐ๋ฅํ ์ง ์ฒดํฌ
while (runningServers * m <= users) {
runningServers++;
serverQ.offer(time + k);
expansionCnt++;
}
}
return expansionCnt;
}
}