|
| 1 | +# [level 2] 완전범죄 - 389480 |
| 2 | + |
| 3 | +[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/389480#qna) |
| 4 | + |
| 5 | +### 성능 요약 |
| 6 | + |
| 7 | +메모리: 86.4 MB, 시간: 0.56 ms |
| 8 | + |
| 9 | +### 구분 |
| 10 | + |
| 11 | +코딩테스트 연습 > 2025 프로그래머스 코드챌린지 2차 예선 |
| 12 | + |
| 13 | +### 채점결과 |
| 14 | + |
| 15 | +정확성: 100.0<br/>합계: 100.0 / 100.0 |
| 16 | + |
| 17 | +### 제출 일자 |
| 18 | + |
| 19 | +2025년 03월 04일 20:35:07 |
| 20 | + |
| 21 | +### 문제 설명 |
| 22 | + |
| 23 | +<p>A도둑과 B도둑이 팀을 이루어 모든 물건을 훔치려고 합니다. 단, 각 도둑이 물건을 훔칠 때 남기는 흔적이 누적되면 경찰에 붙잡히기 때문에, 두 도둑 중 누구도 경찰에 붙잡히지 않도록 흔적을 최소화해야 합니다.</p> |
| 24 | + |
| 25 | +<p>물건을 훔칠 때 조건은 아래와 같습니다.</p> |
| 26 | + |
| 27 | +<ul> |
| 28 | +<li>물건 i를 훔칠 때, |
| 29 | + |
| 30 | +<ul> |
| 31 | +<li>A도둑이 훔치면 <code>info[i][0]</code>개의 A에 대한 흔적을 남깁니다.</li> |
| 32 | +<li>B도둑이 훔치면 <code>info[i][1]</code>개의 B에 대한 흔적을 남깁니다.</li> |
| 33 | +</ul></li> |
| 34 | +<li>각 물건에 대해 A도둑과 B도둑이 남기는 흔적의 개수는 1 이상 3 이하입니다.</li> |
| 35 | +</ul> |
| 36 | + |
| 37 | +<p>경찰에 붙잡히는 조건은 아래와 같습니다.</p> |
| 38 | + |
| 39 | +<ul> |
| 40 | +<li>A도둑은 자신이 남긴 흔적의 누적 개수가 <code>n</code>개 이상이면 경찰에 붙잡힙니다.</li> |
| 41 | +<li>B도둑은 자신이 남긴 흔적의 누적 개수가 <code>m</code>개 이상이면 경찰에 붙잡힙니다.</li> |
| 42 | +</ul> |
| 43 | + |
| 44 | +<p>각 물건을 훔칠 때 생기는 흔적에 대한 정보를 담은 2차원 정수 배열 <code>info</code>, A도둑이 경찰에 붙잡히는 최소 흔적 개수를 나타내는 정수 <code>n</code>, B도둑이 경찰에 붙잡히는 최소 흔적 개수를 나타내는 정수 <code>m</code>이 매개변수로 주어집니다. 두 도둑 모두 경찰에 붙잡히지 않도록 모든 물건을 훔쳤을 때, <strong>A도둑이 남긴 흔적의 누적 개수의 최솟값</strong>을 return 하도록 solution 함수를 완성해 주세요. 만약 어떠한 방법으로도 두 도둑 모두 경찰에 붙잡히지 않게 할 수 없다면 -1을 return해 주세요.</p> |
| 45 | + |
| 46 | +<hr> |
| 47 | + |
| 48 | +<h5>제한사항</h5> |
| 49 | + |
| 50 | +<ul> |
| 51 | +<li>1 ≤ <code>info</code>의 길이 ≤ 40 |
| 52 | + |
| 53 | +<ul> |
| 54 | +<li><code>info[i]</code>는 물건 <code>i</code>를 훔칠 때 생기는 흔적의 개수를 나타내며, [<code>A에 대한 흔적 개수</code>, <code>B에 대한 흔적 개수</code>]의 형태입니다.</li> |
| 55 | +<li>1 ≤ <code>흔적 개수</code> ≤ 3</li> |
| 56 | +</ul></li> |
| 57 | +<li>1 ≤ <code>n</code> ≤ 120</li> |
| 58 | +<li>1 ≤ <code>m</code> ≤ 120</li> |
| 59 | +</ul> |
| 60 | + |
| 61 | +<hr> |
| 62 | + |
| 63 | +<h5>테스트 케이스 구성 안내</h5> |
| 64 | + |
| 65 | +<p>아래는 테스트 케이스 구성을 나타냅니다. 각 그룹 내의 테스트 케이스를 모두 통과하면 해당 그룹에 할당된 점수를 획득할 수 있습니다.</p> |
| 66 | +<table class="table"> |
| 67 | + <thead><tr> |
| 68 | +<th>그룹</th> |
| 69 | +<th>총점</th> |
| 70 | +<th>테스트 케이스 그룹 설명</th> |
| 71 | +</tr> |
| 72 | +</thead> |
| 73 | + <tbody><tr> |
| 74 | +<td>#1</td> |
| 75 | +<td>15%</td> |
| 76 | +<td><code>info[i][1]</code> = 1</td> |
| 77 | +</tr> |
| 78 | +<tr> |
| 79 | +<td>#2</td> |
| 80 | +<td>40%</td> |
| 81 | +<td><code>info</code>의 길이 ≤ 20</td> |
| 82 | +</tr> |
| 83 | +<tr> |
| 84 | +<td>#3</td> |
| 85 | +<td>45%</td> |
| 86 | +<td>추가 제한 사항 없음</td> |
| 87 | +</tr> |
| 88 | +</tbody> |
| 89 | + </table> |
| 90 | +<hr> |
| 91 | + |
| 92 | +<h5>입출력 예</h5> |
| 93 | +<table class="table"> |
| 94 | + <thead><tr> |
| 95 | +<th>info</th> |
| 96 | +<th>n</th> |
| 97 | +<th>m</th> |
| 98 | +<th>result</th> |
| 99 | +</tr> |
| 100 | +</thead> |
| 101 | + <tbody><tr> |
| 102 | +<td>[[1, 2], [2, 3], [2, 1]]</td> |
| 103 | +<td>4</td> |
| 104 | +<td>4</td> |
| 105 | +<td>2</td> |
| 106 | +</tr> |
| 107 | +<tr> |
| 108 | +<td>[[1, 2], [2, 3], [2, 1]]</td> |
| 109 | +<td>1</td> |
| 110 | +<td>7</td> |
| 111 | +<td>0</td> |
| 112 | +</tr> |
| 113 | +<tr> |
| 114 | +<td>[[3, 3], [3, 3]]</td> |
| 115 | +<td>7</td> |
| 116 | +<td>1</td> |
| 117 | +<td>6</td> |
| 118 | +</tr> |
| 119 | +<tr> |
| 120 | +<td>[[3, 3], [3, 3]]</td> |
| 121 | +<td>6</td> |
| 122 | +<td>1</td> |
| 123 | +<td>-1</td> |
| 124 | +</tr> |
| 125 | +</tbody> |
| 126 | + </table> |
| 127 | +<hr> |
| 128 | + |
| 129 | +<h5>입출력 예 설명</h5> |
| 130 | + |
| 131 | +<p><strong>입출력 예 #1</strong></p> |
| 132 | + |
| 133 | +<p>첫 번째와 세 번째 물건을 B도둑이 훔치고 두 번째 물건을 A도둑이 훔치면, A도둑에 대한 흔적은 총 2개이고 B도둑에 대한 흔적은 총 3개입니다. 목표를 달성하면서 A도둑에 대한 흔적 개수를 2보다 더 낮게 만들 수 없습니다.<br> |
| 134 | +따라서 2를 return 해야 합니다.</p> |
| 135 | + |
| 136 | +<p><strong>입출력 예 #2</strong></p> |
| 137 | + |
| 138 | +<p>B도둑이 모든 물건을 훔쳐도 B의 흔적이 7개 이상 쌓이지 않습니다.<br> |
| 139 | +따라서 A도둑의 흔적은 최소 0이 되며, 0을 return 해야 합니다.</p> |
| 140 | + |
| 141 | +<p><strong>입출력 예 #3</strong></p> |
| 142 | + |
| 143 | +<p>B도둑이 한 번이라도 물건을 훔치면 B의 흔적이 최소 1개 이상 남습니다. 따라서 모든 물건을 A도둑이 훔쳐야 하며, 이 경우에도 A의 흔적은 7개 미만입니다.<br> |
| 144 | +따라서, A도둑이 모든 물건을 훔칠 때의 흔적 개수 6을 return 해야 합니다.</p> |
| 145 | + |
| 146 | +<p><strong>입출력 예 #4</strong></p> |
| 147 | + |
| 148 | +<p>어떤 방법으로도 두 도둑 모두 경찰에 붙잡히지 않고 모든 물건을 훔칠 수 없습니다.<br> |
| 149 | +따라서 -1을 return 해야 합니다.</p> |
| 150 | + |
| 151 | + |
| 152 | +> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges |
0 commit comments