|
| 1 | +# [level 3] 상담원 인원 - 214288 |
| 2 | + |
| 3 | +[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/214288) |
| 4 | + |
| 5 | +### 성능 요약 |
| 6 | + |
| 7 | +메모리: 16.9 MB, 시간: 618.59 ms |
| 8 | + |
| 9 | +### 구분 |
| 10 | + |
| 11 | +코딩테스트 연습 > 2023 현대모비스 알고리즘 경진대회 예선 |
| 12 | + |
| 13 | +### 채점결과 |
| 14 | + |
| 15 | +정확성: 100.0<br/>합계: 100.0 / 100.0 |
| 16 | + |
| 17 | +### 제출 일자 |
| 18 | + |
| 19 | +2025년 04월 11일 18:31:59 |
| 20 | + |
| 21 | +### 문제 설명 |
| 22 | + |
| 23 | +<p>현대모비스는 우수한 SW 인재 채용을 위해 상시로 채용 설명회를 진행하고 있습니다. 채용 설명회에서는 채용과 관련된 상담을 원하는 참가자에게 멘토와 1:1로 상담할 수 있는 기회를 제공합니다. 채용 설명회에는 멘토 <code>n</code>명이 있으며, 1~<code>k</code>번으로 분류되는 상담 유형이 있습니다. 각 멘토는 <code>k</code>개의 상담 유형 중 하나만 담당할 수 있습니다. 멘토는 자신이 담당하는 유형의 상담만 가능하며, 다른 유형의 상담은 불가능합니다. 멘토는 동시에 참가자 한 명과만 상담 가능하며, 상담 시간은 정확히 참가자가 요청한 시간만큼 걸립니다. </p> |
| 24 | + |
| 25 | +<p>참가자가 상담 요청을 하면 아래와 같은 규칙대로 상담을 진행합니다.</p> |
| 26 | + |
| 27 | +<ul> |
| 28 | +<li>상담을 원하는 참가자가 상담 요청을 했을 때, 참가자의 상담 유형을 담당하는 멘토 중 상담 중이 아닌 멘토와 상담을 시작합니다.</li> |
| 29 | +<li>만약 참가자의 상담 유형을 담당하는 멘토가 모두 상담 중이라면, 자신의 차례가 올 때까지 기다립니다. <strong>참가자가 기다린 시간은 참가자가 상담 요청했을 때부터 멘토와 상담을 시작할 때까지의 시간입니다.</strong> </li> |
| 30 | +<li>모든 멘토는 상담이 끝났을 때 자신의 상담 유형의 상담을 받기 위해 기다리고 있는 참가자가 있으면 즉시 상담을 시작합니다. 이때, <strong>먼저 상담 요청한 참가자가 우선됩니다.</strong></li> |
| 31 | +</ul> |
| 32 | + |
| 33 | +<p>참가자의 상담 요청 정보가 주어질 때, 참가자가 상담을 요청했을 때부터 상담을 시작하기까지 기다린 시간의 합이 최소가 되도록 각 상담 유형별로 멘토 인원을 정하려 합니다. <strong>단, 각 유형별로 멘토 인원이 적어도 한 명 이상이어야 합니다.</strong> </p> |
| 34 | + |
| 35 | +<p>예를 들어, 5명의 멘토가 있고 1~3번의 3가지 상담 유형이 있을 때 아래와 같은 참가자의 상담 요청이 있습니다.</p> |
| 36 | + |
| 37 | +<p><strong>참가자의 상담 요청</strong></p> |
| 38 | +<table class="table"> |
| 39 | + <thead><tr> |
| 40 | +<th>참가자 번호</th> |
| 41 | +<th>시각</th> |
| 42 | +<th>상담 시간</th> |
| 43 | +<th>상담 유형</th> |
| 44 | +</tr> |
| 45 | +</thead> |
| 46 | + <tbody><tr> |
| 47 | +<td>1번 참가자</td> |
| 48 | +<td>10분</td> |
| 49 | +<td>60분</td> |
| 50 | +<td>1번 유형</td> |
| 51 | +</tr> |
| 52 | +<tr> |
| 53 | +<td>2번 참가자</td> |
| 54 | +<td>15분</td> |
| 55 | +<td>100분</td> |
| 56 | +<td>3번 유형</td> |
| 57 | +</tr> |
| 58 | +<tr> |
| 59 | +<td>3번 참가자</td> |
| 60 | +<td>20분</td> |
| 61 | +<td>30분</td> |
| 62 | +<td>1번 유형</td> |
| 63 | +</tr> |
| 64 | +<tr> |
| 65 | +<td>4번 참가자</td> |
| 66 | +<td>30분</td> |
| 67 | +<td>50분</td> |
| 68 | +<td>3번 유형</td> |
| 69 | +</tr> |
| 70 | +<tr> |
| 71 | +<td>5번 참가자</td> |
| 72 | +<td>50분</td> |
| 73 | +<td>40분</td> |
| 74 | +<td>1번 유형</td> |
| 75 | +</tr> |
| 76 | +<tr> |
| 77 | +<td>6번 참가자</td> |
| 78 | +<td>60분</td> |
| 79 | +<td>30분</td> |
| 80 | +<td>2번 유형</td> |
| 81 | +</tr> |
| 82 | +<tr> |
| 83 | +<td>7번 참가자</td> |
| 84 | +<td>65분</td> |
| 85 | +<td>30분</td> |
| 86 | +<td>1번 유형</td> |
| 87 | +</tr> |
| 88 | +<tr> |
| 89 | +<td>8번 참가자</td> |
| 90 | +<td>70분</td> |
| 91 | +<td>100분</td> |
| 92 | +<td>2번 유형</td> |
| 93 | +</tr> |
| 94 | +</tbody> |
| 95 | + </table> |
| 96 | +<p>이때, 멘토 인원을 아래와 같이 정하면, 참가자가 기다린 시간의 합이 25로 최소가 됩니다.</p> |
| 97 | +<table class="table"> |
| 98 | + <thead><tr> |
| 99 | +<th>1번 유형</th> |
| 100 | +<th>2번 유형</th> |
| 101 | +<th>3번 유형</th> |
| 102 | +</tr> |
| 103 | +</thead> |
| 104 | + <tbody><tr> |
| 105 | +<td>2명</td> |
| 106 | +<td>1명</td> |
| 107 | +<td>2명</td> |
| 108 | +</tr> |
| 109 | +</tbody> |
| 110 | + </table> |
| 111 | +<p><strong>1번 유형</strong></p> |
| 112 | + |
| 113 | +<p>1번 유형을 담당하는 멘토가 2명 있습니다.</p> |
| 114 | + |
| 115 | +<ul> |
| 116 | +<li>1번 참가자가 상담 요청했을 때, 멘토#1과 10분~70분 동안 상담을 합니다.</li> |
| 117 | +<li>3번 참가자가 상담 요청했을 때, 멘토#2와 20분~50분 동안 상담을 합니다.</li> |
| 118 | +<li>5번 참가자가 상담 요청했을 때, 멘토#2와 50분~90분 동안 상담을 합니다.</li> |
| 119 | +<li>7번 참가자가 상담 요청했을 때, 모든 멘토가 상담 중이므로 1번 참가자의 상담이 끝날 때까지 5분 동안 기다리고 멘토#1과 70분~100분 동안 상담을 합니다. </li> |
| 120 | +</ul> |
| 121 | + |
| 122 | +<p><strong>2번 유형</strong></p> |
| 123 | + |
| 124 | +<p>2번 유형을 담당하는 멘토가 1명 있습니다.</p> |
| 125 | + |
| 126 | +<ul> |
| 127 | +<li>6번 참가자가 상담 요청했을 때, 멘토와 60분~90분 동안 상담을 합니다.</li> |
| 128 | +<li>8번 참가자가 상담 요청했을 때, 모든 멘토가 상담 중이므로 6번 참가자의 상담이 끝날 때까지 20분 동안 기다리고 90분~190분 동안 상담을 합니다.</li> |
| 129 | +</ul> |
| 130 | + |
| 131 | +<p><strong>3번 유형</strong></p> |
| 132 | + |
| 133 | +<p>3번 유형을 담당하는 멘토가 2명 있습니다.</p> |
| 134 | + |
| 135 | +<ul> |
| 136 | +<li>2번 참가자가 상담 요청했을 때, 멘토#1과 15분~115분 동안 상담을 합니다.</li> |
| 137 | +<li>4번 참가자가 상담 요청했을 때, 멘토#2와 30분~80분 동안 상담을 합니다.</li> |
| 138 | +</ul> |
| 139 | + |
| 140 | +<p>상담 유형의 수를 나타내는 정수 <code>k</code>, 멘토의 수를 나타내는 정수 <code>n</code>과 참가자의 상담 요청을 담은 2차원 정수 배열 <code>reqs</code>가 매개변수로 주어집니다. 멘토 인원을 적절히 배정했을 때 참가자들이 상담을 받기까지 기다린 시간을 모두 합한 값의 최솟값을 return 하도록 solution 함수를 완성해 주세요.</p> |
| 141 | + |
| 142 | +<hr> |
| 143 | + |
| 144 | +<h5>제한사항</h5> |
| 145 | + |
| 146 | +<ul> |
| 147 | +<li>1 ≤ <code>k</code> ≤ 5</li> |
| 148 | +<li><code>k</code> ≤ <code>n</code> ≤ 20</li> |
| 149 | +<li>3 ≤ <code>reqs</code>의 길이 ≤ 300 |
| 150 | + |
| 151 | +<ul> |
| 152 | +<li><code>reqs</code>의 원소는 [<code>a</code>, <code>b</code>, <code>c</code>] 형태의 길이가 3인 정수 배열이며, <code>c</code>번 유형의 상담을 원하는 참가자가 <code>a</code>분에 <code>b</code>분 동안의 상담을 요청했음을 의미합니다.</li> |
| 153 | +<li>1 ≤ <code>a</code> ≤ 1,000</li> |
| 154 | +<li>1 ≤ <code>b</code> ≤ 100</li> |
| 155 | +<li>1 ≤ <code>c</code> ≤ <code>k</code></li> |
| 156 | +<li><code>reqs</code>는 <code>a</code>를 기준으로 오름차순으로 정렬되어 있습니다.</li> |
| 157 | +<li><code>reqs</code> 배열에서 <code>a</code>는 중복되지 않습니다. 즉, 참가자가 상담 요청한 시각은 모두 다릅니다.</li> |
| 158 | +</ul></li> |
| 159 | +</ul> |
| 160 | + |
| 161 | +<hr> |
| 162 | + |
| 163 | +<h5>입출력 예</h5> |
| 164 | +<table class="table"> |
| 165 | + <thead><tr> |
| 166 | +<th>k</th> |
| 167 | +<th>n</th> |
| 168 | +<th>reqs</th> |
| 169 | +<th>result</th> |
| 170 | +</tr> |
| 171 | +</thead> |
| 172 | + <tbody><tr> |
| 173 | +<td>3</td> |
| 174 | +<td>5</td> |
| 175 | +<td>[[10, 60, 1], [15, 100, 3], [20, 30, 1], [30, 50, 3], [50, 40, 1], [60, 30, 2], [65, 30, 1], [70, 100, 2]]</td> |
| 176 | +<td>25</td> |
| 177 | +</tr> |
| 178 | +<tr> |
| 179 | +<td>2</td> |
| 180 | +<td>3</td> |
| 181 | +<td>[[5, 55, 2], [10, 90, 2], [20, 40, 2], [50, 45, 2], [100, 50, 2]]</td> |
| 182 | +<td>90</td> |
| 183 | +</tr> |
| 184 | +</tbody> |
| 185 | + </table> |
| 186 | +<hr> |
| 187 | + |
| 188 | +<h5>입출력 예 설명</h5> |
| 189 | + |
| 190 | +<p><strong>입출력 예 #1</strong></p> |
| 191 | + |
| 192 | +<p>문제 예시와 같습니다.</p> |
| 193 | + |
| 194 | +<p><strong>입출력 예 #2</strong></p> |
| 195 | + |
| 196 | +<p><strong>참가자의 상담 요청</strong></p> |
| 197 | +<table class="table"> |
| 198 | + <thead><tr> |
| 199 | +<th>참가자 번호</th> |
| 200 | +<th>시각</th> |
| 201 | +<th>상담 시간</th> |
| 202 | +<th>상담 유형</th> |
| 203 | +</tr> |
| 204 | +</thead> |
| 205 | + <tbody><tr> |
| 206 | +<td>1번 참가자</td> |
| 207 | +<td>5분</td> |
| 208 | +<td>55분</td> |
| 209 | +<td>2번 유형</td> |
| 210 | +</tr> |
| 211 | +<tr> |
| 212 | +<td>2번 참가자</td> |
| 213 | +<td>10분</td> |
| 214 | +<td>90분</td> |
| 215 | +<td>2번 유형</td> |
| 216 | +</tr> |
| 217 | +<tr> |
| 218 | +<td>3번 참가자</td> |
| 219 | +<td>20분</td> |
| 220 | +<td>40분</td> |
| 221 | +<td>2번 유형</td> |
| 222 | +</tr> |
| 223 | +<tr> |
| 224 | +<td>4번 참가자</td> |
| 225 | +<td>50분</td> |
| 226 | +<td>45분</td> |
| 227 | +<td>2번 유형</td> |
| 228 | +</tr> |
| 229 | +<tr> |
| 230 | +<td>5번 참가자</td> |
| 231 | +<td>100분</td> |
| 232 | +<td>50분</td> |
| 233 | +<td>2번 유형</td> |
| 234 | +</tr> |
| 235 | +</tbody> |
| 236 | + </table> |
| 237 | +<p>멘토 인원을 아래와 같이 정하면, 참가자가 기다린 시간의 합이 90으로 최소가 됩니다.</p> |
| 238 | +<table class="table"> |
| 239 | + <thead><tr> |
| 240 | +<th>1번 유형</th> |
| 241 | +<th>2번 유형</th> |
| 242 | +</tr> |
| 243 | +</thead> |
| 244 | + <tbody><tr> |
| 245 | +<td>1명</td> |
| 246 | +<td>2명</td> |
| 247 | +</tr> |
| 248 | +</tbody> |
| 249 | + </table> |
| 250 | +<p><strong>1번 유형</strong></p> |
| 251 | + |
| 252 | +<p>1번 유형을 담당하는 멘토가 1명 있습니다. 1번 유형의 상담을 요청한 참가자가 없지만, 유형별로 멘토 인원이 적어도 한 명 이상이어야 합니다.</p> |
| 253 | + |
| 254 | +<p><strong>2번 유형</strong></p> |
| 255 | + |
| 256 | +<p>2번 유형을 담당하는 멘토가 2명 있습니다. </p> |
| 257 | + |
| 258 | +<ul> |
| 259 | +<li>1번 참가자가 상담 요청했을 때, 멘토#1과 5분~60분 동안 상담을 합니다. </li> |
| 260 | +<li>2번 참가자가 상담 요청했을 때, 멘토#2와 10분~100분 동안 상담을 합니다. </li> |
| 261 | +<li>3번 참가자가 상담 요청했을 때, 모든 멘토가 상담 중이므로 1번 참가자의 상담이 끝날 때까지 40분 동안 기다리고 멘토#1과 60분~100분 동안 상담을 합니다. 1번 참가자의 상담이 끝났을 때 4번 참가자도 기다리고 있었지만, 먼저 상담 요청한 3번 참가자가 우선됩니다.</li> |
| 262 | +<li>4번 참가자가 상담 요청했을 때, 모든 멘토가 상담 중이므로 2번 참가자의 상담이 끝날 때까지 50분 동안 기다리고 멘토#2와 100분~145분 동안 상담을 합니다. 이때, 멘토#1과 상담할 수도 있지만 어느 멘토와 상담해도 상관없습니다.</li> |
| 263 | +<li>5번 참가자가 상담 요청했을 때, 멘토#1과 100분~150분 동안 상담을 합니다. </li> |
| 264 | +</ul> |
| 265 | + |
| 266 | +<p>따라서 90을 return 하면 됩니다.</p> |
| 267 | + |
| 268 | + |
| 269 | +> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges |
0 commit comments