|
| 1 | +# [level 3] 주사위 고르기 - 258709 |
| 2 | + |
| 3 | +[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/258709?language=swift) |
| 4 | + |
| 5 | +### 성능 요약 |
| 6 | + |
| 7 | +메모리: 16.5 MB, 시간: 692.31 ms |
| 8 | + |
| 9 | +### 구분 |
| 10 | + |
| 11 | +코딩테스트 연습 > 2024 KAKAO WINTER INTERNSHIP |
| 12 | + |
| 13 | +### 채점결과 |
| 14 | + |
| 15 | +정확성: 100.0<br/>합계: 100.0 / 100.0 |
| 16 | + |
| 17 | +### 제출 일자 |
| 18 | + |
| 19 | +2025년 10월 12일 17:32:30 |
| 20 | + |
| 21 | +### 문제 설명 |
| 22 | + |
| 23 | +<p>A와 B가 <code>n</code>개의 주사위를 가지고 승부를 합니다. 주사위의 6개 면에 각각 하나의 수가 쓰여 있으며, 주사위를 던졌을 때 각 면이 나올 확률은 동일합니다. 각 주사위는 1 ~ <code>n</code>의 번호를 가지고 있으며, 주사위에 쓰인 수의 구성은 모두 다릅니다. </p> |
| 24 | + |
| 25 | +<p>A가 먼저 <code>n / 2</code>개의 주사위를 가져가면 B가 남은 <code>n / 2</code>개의 주사위를 가져갑니다. 각각 가져간 주사위를 모두 굴린 뒤, 나온 수들을 모두 합해 점수를 계산합니다. 점수가 더 큰 쪽이 승리하며, <strong>점수가 같다면 무승부</strong>입니다.</p> |
| 26 | + |
| 27 | +<p>A는 자신이 <strong>승리할 확률</strong>이 가장 높아지도록 주사위를 가져가려 합니다.</p> |
| 28 | + |
| 29 | +<p>다음은 <code>n</code> = 4인 예시입니다.</p> |
| 30 | +<table class="table"> |
| 31 | + <thead><tr> |
| 32 | +<th>주사위</th> |
| 33 | +<th>구성</th> |
| 34 | +</tr> |
| 35 | +</thead> |
| 36 | + <tbody><tr> |
| 37 | +<td>#1</td> |
| 38 | +<td>[1, 2, 3, 4, 5, 6]</td> |
| 39 | +</tr> |
| 40 | +<tr> |
| 41 | +<td>#2</td> |
| 42 | +<td>[3, 3, 3, 3, 4, 4]</td> |
| 43 | +</tr> |
| 44 | +<tr> |
| 45 | +<td>#3</td> |
| 46 | +<td>[1, 3, 3, 4, 4, 4]</td> |
| 47 | +</tr> |
| 48 | +<tr> |
| 49 | +<td>#4</td> |
| 50 | +<td>[1, 1, 4, 4, 5, 5]</td> |
| 51 | +</tr> |
| 52 | +</tbody> |
| 53 | + </table> |
| 54 | +<ul> |
| 55 | +<li>예를 들어 A가 주사위 #1, #2를 가져간 뒤 6, 3을 굴리고, B가 주사위 #3, #4를 가져간 뒤 4, 1을 굴린다면 A의 승리입니다. (6 + 3 > 4 + 1)</li> |
| 56 | +</ul> |
| 57 | + |
| 58 | +<p>A가 가져가는 주사위 조합에 따라, 주사위를 굴린 1296가지 경우의 승패 결과를 세어보면 아래 표와 같습니다.</p> |
| 59 | +<table class="table"> |
| 60 | + <thead><tr> |
| 61 | +<th>A의 주사위</th> |
| 62 | +<th>승</th> |
| 63 | +<th>무</th> |
| 64 | +<th>패</th> |
| 65 | +</tr> |
| 66 | +</thead> |
| 67 | + <tbody><tr> |
| 68 | +<td>#1, #2</td> |
| 69 | +<td>596</td> |
| 70 | +<td>196</td> |
| 71 | +<td>504</td> |
| 72 | +</tr> |
| 73 | +<tr> |
| 74 | +<td>#1, #3</td> |
| 75 | +<td>560</td> |
| 76 | +<td>176</td> |
| 77 | +<td>560</td> |
| 78 | +</tr> |
| 79 | +<tr> |
| 80 | +<td>#1, #4</td> |
| 81 | +<td>616</td> |
| 82 | +<td>184</td> |
| 83 | +<td>496</td> |
| 84 | +</tr> |
| 85 | +<tr> |
| 86 | +<td>#2, #3</td> |
| 87 | +<td>496</td> |
| 88 | +<td>184</td> |
| 89 | +<td>616</td> |
| 90 | +</tr> |
| 91 | +<tr> |
| 92 | +<td>#2, #4</td> |
| 93 | +<td>560</td> |
| 94 | +<td>176</td> |
| 95 | +<td>560</td> |
| 96 | +</tr> |
| 97 | +<tr> |
| 98 | +<td>#3, #4</td> |
| 99 | +<td>504</td> |
| 100 | +<td>196</td> |
| 101 | +<td>596</td> |
| 102 | +</tr> |
| 103 | +</tbody> |
| 104 | + </table> |
| 105 | +<p>A가 승리할 확률이 가장 높아지기 위해선 주사위 #1, #4를 가져가야 합니다.</p> |
| 106 | + |
| 107 | +<p>주사위에 쓰인 수의 구성을 담은 2차원 정수 배열 <code>dice</code>가 매개변수로 주어집니다. 이때, 자신이 승리할 확률이 가장 높아지기 위해 A가 골라야 하는 주사위 번호를 <strong>오름차순으로</strong> 1차원 정수 배열에 담아 return 하도록 solution 함수를 완성해 주세요. 승리할 확률이 가장 높은 주사위 조합이 유일한 경우만 주어집니다. </p> |
| 108 | + |
| 109 | +<hr> |
| 110 | + |
| 111 | +<h5>제한사항</h5> |
| 112 | + |
| 113 | +<ul> |
| 114 | +<li>2 ≤ <code>dice</code>의 길이 = <code>n</code> ≤ 10 |
| 115 | + |
| 116 | +<ul> |
| 117 | +<li><code>n</code>은 2의 배수입니다.</li> |
| 118 | +<li><code>dice[i]</code>는 <code>i+1</code>번 주사위에 쓰인 6개의 수를 담고 있습니다.</li> |
| 119 | +<li><code>dice[i]</code>의 길이 = 6</li> |
| 120 | +<li>1 ≤ <code>dice[i]</code>의 원소 ≤ 100</li> |
| 121 | +</ul></li> |
| 122 | +</ul> |
| 123 | + |
| 124 | +<hr> |
| 125 | + |
| 126 | +<h5>입출력 예</h5> |
| 127 | +<table class="table"> |
| 128 | + <thead><tr> |
| 129 | +<th>dice</th> |
| 130 | +<th>result</th> |
| 131 | +</tr> |
| 132 | +</thead> |
| 133 | + <tbody><tr> |
| 134 | +<td>[[1, 2, 3, 4, 5, 6], [3, 3, 3, 3, 4, 4], [1, 3, 3, 4, 4, 4], [1, 1, 4, 4, 5, 5]]</td> |
| 135 | +<td>[1, 4]</td> |
| 136 | +</tr> |
| 137 | +<tr> |
| 138 | +<td>[[1, 2, 3, 4, 5, 6], [2, 2, 4, 4, 6, 6]]</td> |
| 139 | +<td>[2]</td> |
| 140 | +</tr> |
| 141 | +<tr> |
| 142 | +<td>[[40, 41, 42, 43, 44, 45], [43, 43, 42, 42, 41, 41], [1, 1, 80, 80, 80, 80], [70, 70, 1, 1, 70, 70]]</td> |
| 143 | +<td>[1, 3]</td> |
| 144 | +</tr> |
| 145 | +</tbody> |
| 146 | + </table> |
| 147 | +<hr> |
| 148 | + |
| 149 | +<h5>입출력 예 설명</h5> |
| 150 | + |
| 151 | +<p><strong>입출력 예 #1</strong></p> |
| 152 | + |
| 153 | +<p>문제 예시와 같습니다.</p> |
| 154 | + |
| 155 | +<p><strong>입출력 예 #2</strong></p> |
| 156 | +<table class="table"> |
| 157 | + <thead><tr> |
| 158 | +<th>주사위</th> |
| 159 | +<th>구성</th> |
| 160 | +</tr> |
| 161 | +</thead> |
| 162 | + <tbody><tr> |
| 163 | +<td>#1</td> |
| 164 | +<td>[1, 2, 3, 4, 5, 6]</td> |
| 165 | +</tr> |
| 166 | +<tr> |
| 167 | +<td>#2</td> |
| 168 | +<td>[2, 2, 4, 4, 6, 6]</td> |
| 169 | +</tr> |
| 170 | +</tbody> |
| 171 | + </table> |
| 172 | +<p>A가 주사위 #2를 가져갔을 때 승리할 확률이 가장 높습니다. A가 #2, B가 #1 주사위를 굴린 결과에 따른 승패는 아래 표와 같습니다.</p> |
| 173 | +<table class="table"> |
| 174 | + <thead><tr> |
| 175 | +<th>주사위 결과</th> |
| 176 | +<th>1 (B)</th> |
| 177 | +<th>2 (B)</th> |
| 178 | +<th>3 (B)</th> |
| 179 | +<th>4 (B)</th> |
| 180 | +<th>5 (B)</th> |
| 181 | +<th>6 (B)</th> |
| 182 | +</tr> |
| 183 | +</thead> |
| 184 | + <tbody><tr> |
| 185 | +<td><strong>2 (A)</strong></td> |
| 186 | +<td>승</td> |
| 187 | +<td>무</td> |
| 188 | +<td>패</td> |
| 189 | +<td>패</td> |
| 190 | +<td>패</td> |
| 191 | +<td>패</td> |
| 192 | +</tr> |
| 193 | +<tr> |
| 194 | +<td><strong>2 (A)</strong></td> |
| 195 | +<td>승</td> |
| 196 | +<td>무</td> |
| 197 | +<td>패</td> |
| 198 | +<td>패</td> |
| 199 | +<td>패</td> |
| 200 | +<td>패</td> |
| 201 | +</tr> |
| 202 | +<tr> |
| 203 | +<td><strong>4 (A)</strong></td> |
| 204 | +<td>승</td> |
| 205 | +<td>승</td> |
| 206 | +<td>승</td> |
| 207 | +<td>무</td> |
| 208 | +<td>패</td> |
| 209 | +<td>패</td> |
| 210 | +</tr> |
| 211 | +<tr> |
| 212 | +<td><strong>4 (A)</strong></td> |
| 213 | +<td>승</td> |
| 214 | +<td>승</td> |
| 215 | +<td>승</td> |
| 216 | +<td>무</td> |
| 217 | +<td>패</td> |
| 218 | +<td>패</td> |
| 219 | +</tr> |
| 220 | +<tr> |
| 221 | +<td><strong>6 (A)</strong></td> |
| 222 | +<td>승</td> |
| 223 | +<td>승</td> |
| 224 | +<td>승</td> |
| 225 | +<td>승</td> |
| 226 | +<td>승</td> |
| 227 | +<td>무</td> |
| 228 | +</tr> |
| 229 | +<tr> |
| 230 | +<td><strong>6 (A)</strong></td> |
| 231 | +<td>승</td> |
| 232 | +<td>승</td> |
| 233 | +<td>승</td> |
| 234 | +<td>승</td> |
| 235 | +<td>승</td> |
| 236 | +<td>무</td> |
| 237 | +</tr> |
| 238 | +</tbody> |
| 239 | + </table> |
| 240 | +<p><strong>입출력 예 #3</strong></p> |
| 241 | +<table class="table"> |
| 242 | + <thead><tr> |
| 243 | +<th>주사위</th> |
| 244 | +<th>구성</th> |
| 245 | +</tr> |
| 246 | +</thead> |
| 247 | + <tbody><tr> |
| 248 | +<td>#1</td> |
| 249 | +<td>[40, 41, 42, 43, 44, 45]</td> |
| 250 | +</tr> |
| 251 | +<tr> |
| 252 | +<td>#2</td> |
| 253 | +<td>[43, 43, 42, 42, 41, 41]</td> |
| 254 | +</tr> |
| 255 | +<tr> |
| 256 | +<td>#3</td> |
| 257 | +<td>[1, 1, 80, 80, 80, 80]</td> |
| 258 | +</tr> |
| 259 | +<tr> |
| 260 | +<td>#4</td> |
| 261 | +<td>[70, 70, 1, 1, 70, 70]</td> |
| 262 | +</tr> |
| 263 | +</tbody> |
| 264 | + </table> |
| 265 | +<p>A가 가져가는 주사위 조합에 따라, 주사위를 굴린 1296가지 경우의 승패 결과를 세어보면 아래 표와 같습니다.</p> |
| 266 | +<table class="table"> |
| 267 | + <thead><tr> |
| 268 | +<th>A의 주사위</th> |
| 269 | +<th>승</th> |
| 270 | +<th>무</th> |
| 271 | +<th>패</th> |
| 272 | +</tr> |
| 273 | +</thead> |
| 274 | + <tbody><tr> |
| 275 | +<td>#1, #2</td> |
| 276 | +<td>704</td> |
| 277 | +<td>16</td> |
| 278 | +<td>576</td> |
| 279 | +</tr> |
| 280 | +<tr> |
| 281 | +<td>#1, #3</td> |
| 282 | +<td>936</td> |
| 283 | +<td>24</td> |
| 284 | +<td>336</td> |
| 285 | +</tr> |
| 286 | +<tr> |
| 287 | +<td>#1, #4</td> |
| 288 | +<td>360</td> |
| 289 | +<td>24</td> |
| 290 | +<td>912</td> |
| 291 | +</tr> |
| 292 | +<tr> |
| 293 | +<td>#2, #3</td> |
| 294 | +<td>912</td> |
| 295 | +<td>24</td> |
| 296 | +<td>360</td> |
| 297 | +</tr> |
| 298 | +<tr> |
| 299 | +<td>#2, #4</td> |
| 300 | +<td>336</td> |
| 301 | +<td>24</td> |
| 302 | +<td>936</td> |
| 303 | +</tr> |
| 304 | +<tr> |
| 305 | +<td>#3, #4</td> |
| 306 | +<td>576</td> |
| 307 | +<td>16</td> |
| 308 | +<td>704</td> |
| 309 | +</tr> |
| 310 | +</tbody> |
| 311 | + </table> |
| 312 | +<p>따라서 A가 주사위 #1, #3을 가져갔을 때 승리할 확률이 가장 높습니다.</p> |
| 313 | + |
| 314 | + |
| 315 | +> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges |
0 commit comments