|
| 1 | +# [level 1] [PCCP 기출문제] 1번 / 붕대 감기 - 250137 |
| 2 | + |
| 3 | +[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/250137) |
| 4 | + |
| 5 | +### 성능 요약 |
| 6 | + |
| 7 | +메모리: 33.5 MB, 시간: 0.29 ms |
| 8 | + |
| 9 | +### 구분 |
| 10 | + |
| 11 | +코딩테스트 연습 > PCCP 기출문제 |
| 12 | + |
| 13 | +### 채점결과 |
| 14 | + |
| 15 | +정확성: 100.0<br/>합계: 100.0 / 100.0 |
| 16 | + |
| 17 | +### 제출 일자 |
| 18 | + |
| 19 | +2026년 02월 28일 18:29:59 |
| 20 | + |
| 21 | +### 문제 설명 |
| 22 | + |
| 23 | +<p>어떤 게임에는 <code>붕대 감기</code>라는 기술이 있습니다.</p> |
| 24 | + |
| 25 | +<p><code>붕대 감기</code>는 <code>t</code>초 동안 붕대를 감으면서 1초마다 <code>x</code>만큼의 체력을 회복합니다. <code>t</code>초 연속으로 붕대를 감는 데 성공한다면 <code>y</code>만큼의 체력을 추가로 회복합니다. 게임 캐릭터에는 최대 체력이 존재해 현재 체력이 최대 체력보다 커지는 것은 불가능합니다.</p> |
| 26 | + |
| 27 | +<p>기술을 쓰는 도중 몬스터에게 공격을 당하면 기술이 취소되고, 공격을 당하는 순간에는 체력을 회복할 수 없습니다. 몬스터에게 공격당해 기술이 취소당하거나 기술이 끝나면 그 즉시 <code>붕대 감기</code>를 다시 사용하며, 연속 성공 시간이 0으로 초기화됩니다.</p> |
| 28 | + |
| 29 | +<p>몬스터의 공격을 받으면 정해진 피해량만큼 현재 체력이 줄어듭니다. 이때, 현재 체력이 0 이하가 되면 캐릭터가 죽으며 더 이상 체력을 회복할 수 없습니다.</p> |
| 30 | + |
| 31 | +<p>당신은 <code>붕대감기</code> 기술의 정보, 캐릭터가 가진 최대 체력과 몬스터의 공격 패턴이 주어질 때 캐릭터가 끝까지 생존할 수 있는지 궁금합니다.</p> |
| 32 | + |
| 33 | +<p><code>붕대 감기</code> 기술의 시전 시간, 1초당 회복량, 추가 회복량을 담은 1차원 정수 배열 <code>bandage</code>와 최대 체력을 의미하는 정수 <code>health</code>, 몬스터의 공격 시간과 피해량을 담은 2차원 정수 배열 <code>attacks</code>가 매개변수로 주어집니다. 모든 공격이 끝난 직후 남은 체력을 return 하도록 solution 함수를 완성해 주세요. <strong>만약 몬스터의 공격을 받고 캐릭터의 체력이 0 이하가 되어 죽는다면 -1을 return 해주세요.</strong></p> |
| 34 | + |
| 35 | +<hr> |
| 36 | + |
| 37 | +<h5>제한사항</h5> |
| 38 | + |
| 39 | +<ul> |
| 40 | +<li><code>bandage</code>는 [<code>시전 시간</code>, <code>초당 회복량</code>, <code>추가 회복량</code>] 형태의 길이가 3인 정수 배열입니다. |
| 41 | + |
| 42 | +<ul> |
| 43 | +<li>1 ≤ <code>시전 시간</code> = <code>t</code> ≤ 50</li> |
| 44 | +<li>1 ≤ <code>초당 회복량</code> = <code>x</code> ≤ 100</li> |
| 45 | +<li>1 ≤ <code>추가 회복량</code> = <code>y</code> ≤ 100</li> |
| 46 | +</ul></li> |
| 47 | +<li>1 ≤ <code>health</code> ≤ 1,000</li> |
| 48 | +<li>1 ≤ <code>attacks</code>의 길이 ≤ 100 |
| 49 | + |
| 50 | +<ul> |
| 51 | +<li><code>attacks[i]</code>는 [<code>공격 시간</code>, <code>피해량</code>] 형태의 길이가 2인 정수 배열입니다.</li> |
| 52 | +<li><code>attacks</code>는 <code>공격 시간</code>을 기준으로 오름차순 정렬된 상태입니다.</li> |
| 53 | +<li><code>attacks</code>의 <code>공격 시간</code>은 모두 다릅니다.</li> |
| 54 | +<li>1 ≤ <code>공격 시간</code> ≤ 1,000</li> |
| 55 | +<li>1 ≤ <code>피해량</code> ≤ 100</li> |
| 56 | +</ul></li> |
| 57 | +</ul> |
| 58 | + |
| 59 | +<hr> |
| 60 | + |
| 61 | +<h5>입출력 예</h5> |
| 62 | +<table class="table"> |
| 63 | + <thead><tr> |
| 64 | +<th>bandage</th> |
| 65 | +<th>health</th> |
| 66 | +<th>attacks</th> |
| 67 | +<th>result</th> |
| 68 | +</tr> |
| 69 | +</thead> |
| 70 | + <tbody><tr> |
| 71 | +<td>[5, 1, 5]</td> |
| 72 | +<td>30</td> |
| 73 | +<td>[[2, 10], [9, 15], [10, 5], [11, 5]]</td> |
| 74 | +<td>5</td> |
| 75 | +</tr> |
| 76 | +<tr> |
| 77 | +<td>[3, 2, 7]</td> |
| 78 | +<td>20</td> |
| 79 | +<td>[[1, 15], [5, 16], [8, 6]]</td> |
| 80 | +<td>-1</td> |
| 81 | +</tr> |
| 82 | +<tr> |
| 83 | +<td>[4, 2, 7]</td> |
| 84 | +<td>20</td> |
| 85 | +<td>[[1, 15], [5, 16], [8, 6]]</td> |
| 86 | +<td>-1</td> |
| 87 | +</tr> |
| 88 | +<tr> |
| 89 | +<td>[1, 1, 1]</td> |
| 90 | +<td>5</td> |
| 91 | +<td>[[1, 2], [3, 2]]</td> |
| 92 | +<td>3</td> |
| 93 | +</tr> |
| 94 | +</tbody> |
| 95 | + </table> |
| 96 | +<hr> |
| 97 | + |
| 98 | +<h5>입출력 예 설명</h5> |
| 99 | + |
| 100 | +<p><strong>입출력 예 #1</strong></p> |
| 101 | + |
| 102 | +<p>몬스터의 마지막 공격은 11초에 이루어집니다. 0초부터 11초까지 캐릭터의 상태는 아래 표와 같습니다.</p> |
| 103 | +<table class="table"> |
| 104 | + <thead><tr> |
| 105 | +<th>시간</th> |
| 106 | +<th>현재 체력(변화량)</th> |
| 107 | +<th>연속 성공</th> |
| 108 | +<th>공격</th> |
| 109 | +<th>설명</th> |
| 110 | +</tr> |
| 111 | +</thead> |
| 112 | + <tbody><tr> |
| 113 | +<td>0</td> |
| 114 | +<td>30</td> |
| 115 | +<td>0</td> |
| 116 | +<td>X</td> |
| 117 | +<td>초기 상태</td> |
| 118 | +</tr> |
| 119 | +<tr> |
| 120 | +<td>1</td> |
| 121 | +<td>30(+0)</td> |
| 122 | +<td>1</td> |
| 123 | +<td>X</td> |
| 124 | +<td>최대 체력 이상의 체력을 가질 수 없습니다.</td> |
| 125 | +</tr> |
| 126 | +<tr> |
| 127 | +<td>2</td> |
| 128 | +<td>20(-10)</td> |
| 129 | +<td>0</td> |
| 130 | +<td>O</td> |
| 131 | +<td>몬스터의 공격으로 연속 성공이 초기화됩니다.</td> |
| 132 | +</tr> |
| 133 | +<tr> |
| 134 | +<td>3</td> |
| 135 | +<td>21(+1)</td> |
| 136 | +<td>1</td> |
| 137 | +<td>X</td> |
| 138 | +<td></td> |
| 139 | +</tr> |
| 140 | +<tr> |
| 141 | +<td>4</td> |
| 142 | +<td>22(+1)</td> |
| 143 | +<td>2</td> |
| 144 | +<td>X</td> |
| 145 | +<td></td> |
| 146 | +</tr> |
| 147 | +<tr> |
| 148 | +<td>5</td> |
| 149 | +<td>23(+1)</td> |
| 150 | +<td>3</td> |
| 151 | +<td>X</td> |
| 152 | +<td></td> |
| 153 | +</tr> |
| 154 | +<tr> |
| 155 | +<td>6</td> |
| 156 | +<td>24(+1)</td> |
| 157 | +<td>4</td> |
| 158 | +<td>X</td> |
| 159 | +<td></td> |
| 160 | +</tr> |
| 161 | +<tr> |
| 162 | +<td>7</td> |
| 163 | +<td>30(+6)</td> |
| 164 | +<td>5 → 0</td> |
| 165 | +<td>X</td> |
| 166 | +<td>5초 연속 성공해 체력을 5만큼 추가 회복하고 연속 성공이 초기화됩니다.</td> |
| 167 | +</tr> |
| 168 | +<tr> |
| 169 | +<td>8</td> |
| 170 | +<td>30(+0)</td> |
| 171 | +<td>1</td> |
| 172 | +<td>X</td> |
| 173 | +<td>최대 체력 이상의 체력을 가질 수 없습니다.</td> |
| 174 | +</tr> |
| 175 | +<tr> |
| 176 | +<td>9</td> |
| 177 | +<td>15(-15)</td> |
| 178 | +<td>0</td> |
| 179 | +<td>O</td> |
| 180 | +<td>몬스터의 공격으로 연속 성공이 초기화됩니다.</td> |
| 181 | +</tr> |
| 182 | +<tr> |
| 183 | +<td>10</td> |
| 184 | +<td>10(-5)</td> |
| 185 | +<td>0</td> |
| 186 | +<td>O</td> |
| 187 | +<td>몬스터의 공격으로 연속 성공이 초기화됩니다.</td> |
| 188 | +</tr> |
| 189 | +<tr> |
| 190 | +<td>11</td> |
| 191 | +<td>5(-5)</td> |
| 192 | +<td>0</td> |
| 193 | +<td>O</td> |
| 194 | +<td>몬스터의 마지막 공격입니다.</td> |
| 195 | +</tr> |
| 196 | +</tbody> |
| 197 | + </table> |
| 198 | +<p>몬스터의 마지막 공격 직후 캐릭터의 체력은 5입니다. 따라서 <code>5</code>을 return 해야 합니다.</p> |
| 199 | + |
| 200 | +<p><strong>입출력 예 #2</strong></p> |
| 201 | + |
| 202 | +<p>몬스터의 마지막 공격은 8초에 이루어집니다. 0초부터 8초까지 캐릭터의 상태는 아래 표와 같습니다.</p> |
| 203 | +<table class="table"> |
| 204 | + <thead><tr> |
| 205 | +<th>시간</th> |
| 206 | +<th>현재 체력(변화량)</th> |
| 207 | +<th>연속 성공</th> |
| 208 | +<th>공격</th> |
| 209 | +<th>설명</th> |
| 210 | +</tr> |
| 211 | +</thead> |
| 212 | + <tbody><tr> |
| 213 | +<td>0</td> |
| 214 | +<td>20</td> |
| 215 | +<td>0</td> |
| 216 | +<td>X</td> |
| 217 | +<td>초기 상태</td> |
| 218 | +</tr> |
| 219 | +<tr> |
| 220 | +<td>1</td> |
| 221 | +<td>5(-15)</td> |
| 222 | +<td>0</td> |
| 223 | +<td>O</td> |
| 224 | +<td>몬스터의 공격으로 연속 성공이 초기화됩니다.</td> |
| 225 | +</tr> |
| 226 | +<tr> |
| 227 | +<td>2</td> |
| 228 | +<td>7(+2)</td> |
| 229 | +<td>1</td> |
| 230 | +<td>X</td> |
| 231 | +<td></td> |
| 232 | +</tr> |
| 233 | +<tr> |
| 234 | +<td>3</td> |
| 235 | +<td>9(+2)</td> |
| 236 | +<td>2</td> |
| 237 | +<td>X</td> |
| 238 | +<td></td> |
| 239 | +</tr> |
| 240 | +<tr> |
| 241 | +<td>4</td> |
| 242 | +<td>18(+9)</td> |
| 243 | +<td>3 → 0</td> |
| 244 | +<td>X</td> |
| 245 | +<td>3초 연속 성공해 체력을 7만큼 추가 회복하고 연속 성공이 초기화됩니다.</td> |
| 246 | +</tr> |
| 247 | +<tr> |
| 248 | +<td>5</td> |
| 249 | +<td>2(-16)</td> |
| 250 | +<td>0</td> |
| 251 | +<td>O</td> |
| 252 | +<td>몬스터의 공격으로 연속 성공이 초기화됩니다.</td> |
| 253 | +</tr> |
| 254 | +<tr> |
| 255 | +<td>6</td> |
| 256 | +<td>4(+2)</td> |
| 257 | +<td>1</td> |
| 258 | +<td>X</td> |
| 259 | +<td></td> |
| 260 | +</tr> |
| 261 | +<tr> |
| 262 | +<td>7</td> |
| 263 | +<td>6(+2)</td> |
| 264 | +<td>2</td> |
| 265 | +<td>X</td> |
| 266 | +<td></td> |
| 267 | +</tr> |
| 268 | +<tr> |
| 269 | +<td>8</td> |
| 270 | +<td>0(-6)</td> |
| 271 | +<td>0</td> |
| 272 | +<td>O</td> |
| 273 | +<td>몬스터의 마지막 공격을 받아 캐릭터의 체력이 0 이하가 됩니다.</td> |
| 274 | +</tr> |
| 275 | +</tbody> |
| 276 | + </table> |
| 277 | +<p>몬스터의 공격을 받아 캐릭터의 체력이 0 이하가 됩니다. 따라서 <code>-1</code>을 return 해야 합니다.</p> |
| 278 | + |
| 279 | +<p><strong>입출력 예 #3</strong></p> |
| 280 | + |
| 281 | +<p>몬스터의 마지막 공격은 8초에 이루어집니다. 0초부터 5초까지 캐릭터의 상태는 아래 표와 같습니다.</p> |
| 282 | +<table class="table"> |
| 283 | + <thead><tr> |
| 284 | +<th>시간</th> |
| 285 | +<th>현재 체력(변화량)</th> |
| 286 | +<th>연속 성공</th> |
| 287 | +<th>공격</th> |
| 288 | +<th>설명</th> |
| 289 | +</tr> |
| 290 | +</thead> |
| 291 | + <tbody><tr> |
| 292 | +<td>0</td> |
| 293 | +<td>20</td> |
| 294 | +<td>0</td> |
| 295 | +<td>X</td> |
| 296 | +<td>초기 상태</td> |
| 297 | +</tr> |
| 298 | +<tr> |
| 299 | +<td>1</td> |
| 300 | +<td>5(-15)</td> |
| 301 | +<td>0</td> |
| 302 | +<td>O</td> |
| 303 | +<td>몬스터의 공격으로 연속 성공이 초기화됩니다.</td> |
| 304 | +</tr> |
| 305 | +<tr> |
| 306 | +<td>2</td> |
| 307 | +<td>7(+2)</td> |
| 308 | +<td>1</td> |
| 309 | +<td>X</td> |
| 310 | +<td></td> |
| 311 | +</tr> |
| 312 | +<tr> |
| 313 | +<td>3</td> |
| 314 | +<td>9(+2)</td> |
| 315 | +<td>2</td> |
| 316 | +<td>X</td> |
| 317 | +<td></td> |
| 318 | +</tr> |
| 319 | +<tr> |
| 320 | +<td>4</td> |
| 321 | +<td>11(+2)</td> |
| 322 | +<td>3</td> |
| 323 | +<td>X</td> |
| 324 | +<td></td> |
| 325 | +</tr> |
| 326 | +<tr> |
| 327 | +<td>5</td> |
| 328 | +<td>-5(-16)</td> |
| 329 | +<td>0</td> |
| 330 | +<td>O</td> |
| 331 | +<td>몬스터의 공격을 받아 캐릭터의 체력이 0 이하가 됩니다.</td> |
| 332 | +</tr> |
| 333 | +</tbody> |
| 334 | + </table> |
| 335 | +<p>몬스터의 공격을 받아 캐릭터의 체력이 0 이하가 됩니다. 따라서 <code>-1</code>을 return 해야 합니다.</p> |
| 336 | + |
| 337 | +<p><strong>입출력 예 #4</strong></p> |
| 338 | + |
| 339 | +<p>몬스터의 마지막 공격은 3초에 이루어집니다. 0초부터 3초까지 캐릭터의 상태는 아래 표와 같습니다.</p> |
| 340 | +<table class="table"> |
| 341 | + <thead><tr> |
| 342 | +<th>시간</th> |
| 343 | +<th>현재 체력(변화량)</th> |
| 344 | +<th>연속 성공</th> |
| 345 | +<th>공격</th> |
| 346 | +<th>설명</th> |
| 347 | +</tr> |
| 348 | +</thead> |
| 349 | + <tbody><tr> |
| 350 | +<td>0</td> |
| 351 | +<td>5</td> |
| 352 | +<td>0</td> |
| 353 | +<td>X</td> |
| 354 | +<td>초기 상태</td> |
| 355 | +</tr> |
| 356 | +<tr> |
| 357 | +<td>1</td> |
| 358 | +<td>3(-2)</td> |
| 359 | +<td>0</td> |
| 360 | +<td>O</td> |
| 361 | +<td>몬스터의 공격으로 연속 성공이 초기화됩니다.</td> |
| 362 | +</tr> |
| 363 | +<tr> |
| 364 | +<td>2</td> |
| 365 | +<td>5(+2)</td> |
| 366 | +<td>1 → 0</td> |
| 367 | +<td>X</td> |
| 368 | +<td>1초 연속 성공해 체력을 1만큼 추가 회복하고 연속 성공이 초기화됩니다.</td> |
| 369 | +</tr> |
| 370 | +<tr> |
| 371 | +<td>3</td> |
| 372 | +<td>3(-2)</td> |
| 373 | +<td>0</td> |
| 374 | +<td>O</td> |
| 375 | +<td>몬스터의 마지막 공격입니다.</td> |
| 376 | +</tr> |
| 377 | +</tbody> |
| 378 | + </table> |
| 379 | +<p>몬스터의 마지막 공격 직후 캐릭터의 체력은 3입니다. 따라서 <code>3</code>을 return 해야 합니다.</p> |
| 380 | + |
| 381 | + |
| 382 | +> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges |
0 commit comments