Skip to content

Commit 767f7f5

Browse files
committed
[level 2] Title: 서버 증설 횟수, Time: 0.86 ms, Memory: 90.5 MB -BaekjoonHub
1 parent 0c3317e commit 767f7f5

File tree

2 files changed

+330
-0
lines changed

2 files changed

+330
-0
lines changed
Lines changed: 302 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,302 @@
1+
# [level 2] 서버 증설 횟수 - 389479
2+
3+
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/389479)
4+
5+
### 성능 요약
6+
7+
메모리: 90.5 MB, 시간: 0.86 ms
8+
9+
### 구분
10+
11+
코딩테스트 연습 > 2025 프로그래머스 코드챌린지 2차 예선
12+
13+
### 채점결과
14+
15+
정확성: 100.0<br/>합계: 100.0 / 100.0
16+
17+
### 제출 일자
18+
19+
2025년 10월 17일 19:58:43
20+
21+
### 문제 설명
22+
23+
<p>당신은 온라인 게임을 운영하고 있습니다. 같은 시간대에 게임을 이용하는 사람이 <code>m</code>명 늘어날 때마다 서버 1대가 추가로 필요합니다. 어느 시간대의 이용자가 <code>m</code>명 미만이라면, 서버 증설이 필요하지 않습니다. 어느 시간대의 이용자가 <code>n x m</code>명 이상 <code>(n + 1) x m</code>명 미만이라면 최소 <code>n</code>대의 증설된 서버가 운영 중이어야 합니다. 한 번 증설한 서버는 <code>k</code>시간 동안 운영하고 그 이후에는 반납합니다. 예를 들어, <code>k</code> = 5 일 때 10시에 증설한 서버는 10 ~ 15시에만 운영됩니다.</p>
24+
25+
<p>하루 동안 모든 게임 이용자가 게임을 하기 위해 서버를 최소 몇 번 증설해야 하는지 알고 싶습니다. 같은 시간대에 서버를 x대 증설했다면 해당 시간대의 증설 횟수는 x회입니다.</p>
26+
27+
<p>다음은 <code>m</code> = 3, <code>k</code> = 5 일 때의 시간대별 증설된 서버의 수와 증설 횟수 예시입니다.</p>
28+
<table class="table">
29+
<thead><tr>
30+
<th>시각</th>
31+
<th>게임 이용자의 수</th>
32+
<th>증설된 서버의 수</th>
33+
<th>증설 횟수</th>
34+
</tr>
35+
</thead>
36+
<tbody><tr>
37+
<td>0 ~ 1</td>
38+
<td>0</td>
39+
<td>0</td>
40+
<td>0</td>
41+
</tr>
42+
<tr>
43+
<td>1 ~ 2</td>
44+
<td>2</td>
45+
<td>0</td>
46+
<td>0</td>
47+
</tr>
48+
<tr>
49+
<td>2 ~ 3</td>
50+
<td>3</td>
51+
<td>1</td>
52+
<td>1</td>
53+
</tr>
54+
<tr>
55+
<td>3 ~ 4</td>
56+
<td>3</td>
57+
<td>1</td>
58+
<td>0</td>
59+
</tr>
60+
<tr>
61+
<td>4 ~ 5</td>
62+
<td>1</td>
63+
<td>1</td>
64+
<td>0</td>
65+
</tr>
66+
<tr>
67+
<td>5 ~ 6</td>
68+
<td>2</td>
69+
<td>1</td>
70+
<td>0</td>
71+
</tr>
72+
<tr>
73+
<td>6 ~ 7</td>
74+
<td>0</td>
75+
<td>1</td>
76+
<td>0</td>
77+
</tr>
78+
<tr>
79+
<td>7 ~ 8</td>
80+
<td>0</td>
81+
<td>0</td>
82+
<td>0</td>
83+
</tr>
84+
<tr>
85+
<td>8 ~ 9</td>
86+
<td>0</td>
87+
<td>0</td>
88+
<td>0</td>
89+
</tr>
90+
<tr>
91+
<td>9 ~ 10</td>
92+
<td>0</td>
93+
<td>0</td>
94+
<td>0</td>
95+
</tr>
96+
<tr>
97+
<td>10 ~ 11</td>
98+
<td>4</td>
99+
<td>1</td>
100+
<td>1</td>
101+
</tr>
102+
<tr>
103+
<td>11 ~ 12</td>
104+
<td>2</td>
105+
<td>1</td>
106+
<td>0</td>
107+
</tr>
108+
<tr>
109+
<td>12 ~ 13</td>
110+
<td>0</td>
111+
<td>1</td>
112+
<td>0</td>
113+
</tr>
114+
<tr>
115+
<td>13 ~ 14</td>
116+
<td>6</td>
117+
<td>2</td>
118+
<td>1</td>
119+
</tr>
120+
<tr>
121+
<td>14 ~ 15</td>
122+
<td>0</td>
123+
<td>2</td>
124+
<td>0</td>
125+
</tr>
126+
<tr>
127+
<td>15 ~ 16</td>
128+
<td>4</td>
129+
<td>1</td>
130+
<td>0</td>
131+
</tr>
132+
<tr>
133+
<td>16 ~ 17</td>
134+
<td>2</td>
135+
<td>1</td>
136+
<td>0</td>
137+
</tr>
138+
<tr>
139+
<td>17 ~ 18</td>
140+
<td>13</td>
141+
<td>4</td>
142+
<td>3</td>
143+
</tr>
144+
<tr>
145+
<td>18 ~ 19</td>
146+
<td>3</td>
147+
<td>3</td>
148+
<td>0</td>
149+
</tr>
150+
<tr>
151+
<td>19 ~ 20</td>
152+
<td>5</td>
153+
<td>3</td>
154+
<td>0</td>
155+
</tr>
156+
<tr>
157+
<td>20 ~ 21</td>
158+
<td>10</td>
159+
<td>3</td>
160+
<td>0</td>
161+
</tr>
162+
<tr>
163+
<td>21 ~ 22</td>
164+
<td>0</td>
165+
<td>3</td>
166+
<td>0</td>
167+
</tr>
168+
<tr>
169+
<td>22 ~ 23</td>
170+
<td>1</td>
171+
<td>0</td>
172+
<td>0</td>
173+
</tr>
174+
<tr>
175+
<td>23 ~ 24</td>
176+
<td>5</td>
177+
<td>1</td>
178+
<td>1</td>
179+
</tr>
180+
</tbody>
181+
</table>
182+
<p>모든 게임 이용자를 감당하기 위해 최소 7번 서버를 증설해야 하며, 이보다 적은 수의 서버 증설로는 모든 게임 이용자를 감당할 수 없습니다.</p>
183+
184+
<p>0시에서 23시까지의 시간대별 게임 이용자의 수를 나타내는 1차원 정수 배열 <code>players</code>, 서버 한 대로 감당할 수 있는 최대 이용자의 수를 나타내는 정수 <code>m</code>, 서버 한 대가 운영 가능한 시간을 나타내는 정수 <code>k</code>가 주어집니다. 이때, 모든 게임 이용자를 감당하기 위한 최소 서버 증설 횟수를 return 하도록 solution을 완성해 주세요.</p>
185+
186+
<hr>
187+
188+
<h5>제한사항</h5>
189+
190+
<ul>
191+
<li><code>players</code>의 길이 = 24
192+
193+
<ul>
194+
<li>0 ≤ <code>players</code>의 원소 ≤ 1,000</li>
195+
<li><code>players[i]</code>는 <code>i</code>시 ~ <code>i+1</code>시 사이의 게임 이용자의 수를 나타냅니다.</li>
196+
</ul></li>
197+
<li>1 ≤ <code>m</code> ≤ 1,000</li>
198+
<li>1 ≤ <code>k</code> ≤ 24</li>
199+
</ul>
200+
201+
<hr>
202+
203+
<h5>테스트 케이스 구성 안내</h5>
204+
205+
<p>아래는 테스트 케이스 구성을 나타냅니다. 각 그룹 내의 테스트 케이스를 모두 통과하면 해당 그룹에 할당된 점수를 획득할 수 있습니다.</p>
206+
<table class="table">
207+
<thead><tr>
208+
<th>그룹</th>
209+
<th>총점</th>
210+
<th>추가 제한 사항</th>
211+
</tr>
212+
</thead>
213+
<tbody><tr>
214+
<td>#1</td>
215+
<td>5%</td>
216+
<td>m = <code>1</code>, k = <code>1</code></td>
217+
</tr>
218+
<tr>
219+
<td>#2</td>
220+
<td>7%</td>
221+
<td>k = <code>1</code></td>
222+
</tr>
223+
<tr>
224+
<td>#3</td>
225+
<td>88%</td>
226+
<td>추가 제한 사항 없음</td>
227+
</tr>
228+
</tbody>
229+
</table>
230+
<hr>
231+
232+
<h5>입출력 예</h5>
233+
<table class="table">
234+
<thead><tr>
235+
<th>players</th>
236+
<th>m</th>
237+
<th>k</th>
238+
<th>result</th>
239+
</tr>
240+
</thead>
241+
<tbody><tr>
242+
<td>[0, 2, 3, 3, 1, 2, 0, 0, 0, 0, 4, 2, 0, 6, 0, 4, 2, 13, 3, 5, 10, 0, 1, 5]</td>
243+
<td>3</td>
244+
<td>5</td>
245+
<td>7</td>
246+
</tr>
247+
<tr>
248+
<td>[0, 0, 0, 10, 0, 12, 0, 15, 0, 1, 0, 1, 0, 0, 0, 5, 0, 0, 11, 0, 8, 0, 0, 0]</td>
249+
<td>5</td>
250+
<td>1</td>
251+
<td>11</td>
252+
</tr>
253+
<tr>
254+
<td>[0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 5, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1]</td>
255+
<td>1</td>
256+
<td>1</td>
257+
<td>12</td>
258+
</tr>
259+
</tbody>
260+
</table>
261+
<hr>
262+
263+
<h5>입출력 예 설명</h5>
264+
265+
<p><strong>입출력 예 #1</strong></p>
266+
267+
<ul>
268+
<li>문제의 예시와 같습니다.</li>
269+
</ul>
270+
271+
<p><strong>입출력 예 #2</strong></p>
272+
273+
<ul>
274+
<li>총 11번 서버를 증설해야 합니다.
275+
276+
<ul>
277+
<li>3 ~ 4시: 2번</li>
278+
<li>5 ~ 6시: 2번</li>
279+
<li>7 ~ 8시: 3번</li>
280+
<li>15 ~ 16시: 1번</li>
281+
<li>18 ~ 19시: 2번</li>
282+
<li>20 ~ 21시: 1번</li>
283+
</ul></li>
284+
</ul>
285+
286+
<p><strong>입출력 예 #3</strong></p>
287+
288+
<ul>
289+
<li>총 12번 서버를 증설해야 합니다.
290+
291+
<ul>
292+
<li>5 ~ 6시: 2번</li>
293+
<li>9 ~ 10시: 1번</li>
294+
<li>11 ~ 12시: 5번</li>
295+
<li>13 ~ 14시: 2번</li>
296+
<li>15 ~ 16시: 1번</li>
297+
<li>23 ~ 24시: 1번</li>
298+
</ul></li>
299+
</ul>
300+
301+
302+
> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import java.util.*;
2+
3+
class Solution {
4+
public int solution(int[] players, int m, int k) {
5+
int answer =0;
6+
Queue<Integer> server = new LinkedList<>();
7+
for(int i = players.length-1; i>=0; i--) {
8+
while(!server.isEmpty() && server.peek() - i == k) {
9+
server.poll();
10+
}
11+
12+
if(players[i] >= m) {
13+
int neededServer = players[i]/m;
14+
if(server.size() >= neededServer) {
15+
continue;
16+
}
17+
else if(server.size() < neededServer) {
18+
int need = neededServer - server.size();
19+
for(int j=0; j<need; j++) {
20+
server.add(i);
21+
answer +=1;
22+
}
23+
}
24+
}
25+
}
26+
return answer;
27+
}
28+
}

0 commit comments

Comments
 (0)