|
| 1 | +# [level 3] 파괴되지 않은 건물 - 92344 |
| 2 | + |
| 3 | +[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/92344) |
| 4 | + |
| 5 | +### 성능 요약 |
| 6 | + |
| 7 | +메모리: 135 MB, 시간: 806.55 ms |
| 8 | + |
| 9 | +### 구분 |
| 10 | + |
| 11 | +코딩테스트 연습 > 2022 KAKAO BLIND RECRUITMENT |
| 12 | + |
| 13 | +### 채점결과 |
| 14 | + |
| 15 | +정확성: 53.8<br/>효율성: 46.2<br/>합계: 100.0 / 100.0 |
| 16 | + |
| 17 | +### 제출 일자 |
| 18 | + |
| 19 | +2026년 03월 15일 17:50:53 |
| 20 | + |
| 21 | +### 문제 설명 |
| 22 | + |
| 23 | +<h5>문제 설명</h5> |
| 24 | + |
| 25 | +<p><strong>[본 문제는 정확성과 효율성 테스트 각각 점수가 있는 문제입니다.]</strong></p> |
| 26 | + |
| 27 | +<p>N x M 크기의 행렬 모양의 게임 맵이 있습니다. 이 맵에는 내구도를 가진 건물이 각 칸마다 하나씩 있습니다. 적은 이 건물들을 공격하여 파괴하려고 합니다. 건물은 적의 공격을 받으면 내구도가 감소하고 내구도가 0이하가 되면 파괴됩니다. 반대로, 아군은 회복 스킬을 사용하여 건물들의 내구도를 높이려고 합니다.</p> |
| 28 | + |
| 29 | +<p>적의 공격과 아군의 회복 스킬은 항상 직사각형 모양입니다.<br> |
| 30 | +예를 들어, 아래 사진은 크기가 4 x 5인 맵에 내구도가 5인 건물들이 있는 상태입니다.</p> |
| 31 | + |
| 32 | +<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/9932445f-244d-4188-a559-f16044cfa4d3/04_2022_%E1%84%80%E1%85%A9%E1%86%BC%E1%84%8E%E1%85%A2%E1%84%86%E1%85%AE%E1%86%AB%E1%84%8C%E1%85%A6_%E1%84%91%E1%85%A1%E1%84%80%E1%85%AC%E1%84%83%E1%85%AC%E1%84%8C%E1%85%B5%E1%84%8B%E1%85%A1%E1%86%AD%E1%84%8B%E1%85%B3%E1%86%AB%E1%84%80%E1%85%A5%E1%86%AB%E1%84%86%E1%85%AE%E1%86%AF_01.png" title="" alt="04_2022_공채문제_파괴되지않은건물_01.png"></p> |
| 33 | + |
| 34 | +<p>첫 번째로 적이 맵의 <strong>(0,0)부터 (3,4)까지 공격하여 4만큼</strong> 건물의 내구도를 낮추면 아래와 같은 상태가 됩니다.</p> |
| 35 | + |
| 36 | +<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/2a3df058-d7b6-4317-9352-8f9713a9424a/04_2022_%E1%84%80%E1%85%A9%E1%86%BC%E1%84%8E%E1%85%A2%E1%84%86%E1%85%AE%E1%86%AB%E1%84%8C%E1%85%A6_%E1%84%91%E1%85%A1%E1%84%80%E1%85%AC%E1%84%83%E1%85%AC%E1%84%8C%E1%85%B5%E1%84%8B%E1%85%A1%E1%86%AD%E1%84%8B%E1%85%B3%E1%86%AB%E1%84%80%E1%85%A5%E1%86%AB%E1%84%86%E1%85%AE%E1%86%AF_02.png" title="" alt="04_2022_공채문제_파괴되지않은건물_02.png"></p> |
| 37 | + |
| 38 | +<p>두 번째로 적이 맵의 <strong>(2,0)부터 (2,3)까지 공격하여 2만큼</strong> 건물의 내구도를 낮추면 아래와 같이 4개의 건물이 파괴되는 상태가 됩니다.</p> |
| 39 | + |
| 40 | +<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/94a07a93-71e3-447c-83cf-f855176e28c1/04_2022_%E1%84%80%E1%85%A9%E1%86%BC%E1%84%8E%E1%85%A2%E1%84%86%E1%85%AE%E1%86%AB%E1%84%8C%E1%85%A6_%E1%84%91%E1%85%A1%E1%84%80%E1%85%AC%E1%84%83%E1%85%AC%E1%84%8C%E1%85%B5%E1%84%8B%E1%85%A1%E1%86%AD%E1%84%8B%E1%85%B3%E1%86%AB%E1%84%80%E1%85%A5%E1%86%AB%E1%84%86%E1%85%AE%E1%86%AF_03.png" title="" alt="04_2022_공채문제_파괴되지않은건물_03.png"></p> |
| 41 | + |
| 42 | +<p>세 번째로 아군이 맵의 <strong>(1,0)부터 (3,1)까지 회복하여 2만큼</strong> 건물의 내구도를 높이면 아래와 같이 <strong>2개의 건물이 파괴되었다가 복구</strong>되고 2개의 건물만 파괴되어있는 상태가 됩니다.</p> |
| 43 | + |
| 44 | +<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/145dfcf7-02aa-44fd-b01b-ff56fb5b0dad/04_2022_%E1%84%80%E1%85%A9%E1%86%BC%E1%84%8E%E1%85%A2%E1%84%86%E1%85%AE%E1%86%AB%E1%84%8C%E1%85%A6_%E1%84%91%E1%85%A1%E1%84%80%E1%85%AC%E1%84%83%E1%85%AC%E1%84%8C%E1%85%B5%E1%84%8B%E1%85%A1%E1%86%AD%E1%84%8B%E1%85%B3%E1%86%AB%E1%84%80%E1%85%A5%E1%86%AB%E1%84%86%E1%85%AE%E1%86%AF_04.png" title="" alt="04_2022_공채문제_파괴되지않은건물_04.png"></p> |
| 45 | + |
| 46 | +<p>마지막으로 적이 맵의 <strong>(0,1)부터 (3,3)까지 공격하여 1만큼</strong> 건물의 내구도를 낮추면 아래와 같이 8개의 건물이 더 파괴되어 총 10개의 건물이 파괴된 상태가 됩니다. <strong>(내구도가 0 이하가 된 이미 파괴된 건물도, 공격을 받으면 계속해서 내구도가 하락하는 것에 유의해주세요.)</strong></p> |
| 47 | + |
| 48 | +<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/9ce05af0-e5b9-483a-aeb4-d7c0624c2dfb/04_2022_%E1%84%80%E1%85%A9%E1%86%BC%E1%84%8E%E1%85%A2%E1%84%86%E1%85%AE%E1%86%AB%E1%84%8C%E1%85%A6_%E1%84%91%E1%85%A1%E1%84%80%E1%85%AC%E1%84%83%E1%85%AC%E1%84%8C%E1%85%B5%E1%84%8B%E1%85%A1%E1%86%AD%E1%84%8B%E1%85%B3%E1%86%AB%E1%84%80%E1%85%A5%E1%86%AB%E1%84%86%E1%85%AE%E1%86%AF_05.png" title="" alt="04_2022_공채문제_파괴되지않은건물_05.png"></p> |
| 49 | + |
| 50 | +<p>최종적으로 총 10개의 건물이 파괴되지 않았습니다.</p> |
| 51 | + |
| 52 | +<p>건물의 내구도를 나타내는 2차원 정수 배열 <code>board</code>와 적의 공격 혹은 아군의 회복 스킬을 나타내는 2차원 정수 배열 <code>skill</code>이 매개변수로 주어집니다. 적의 공격 혹은 아군의 회복 스킬이 모두 끝난 뒤 파괴되지 않은 건물의 개수를 return하는 solution함수를 완성해 주세요.</p> |
| 53 | + |
| 54 | +<hr> |
| 55 | + |
| 56 | +<h5>제한사항</h5> |
| 57 | + |
| 58 | +<ul> |
| 59 | +<li>1 ≤ <code>board</code>의 행의 길이 (= <code>N</code>) ≤ 1,000</li> |
| 60 | +<li>1 ≤ <code>board</code>의 열의 길이 (= <code>M</code>) ≤ 1,000</li> |
| 61 | +<li>1 ≤ <code>board</code>의 원소 (각 건물의 내구도) ≤ 1,000</li> |
| 62 | +<li>1 ≤ <code>skill</code>의 행의 길이 ≤ 250,000</li> |
| 63 | +<li><code>skill</code>의 열의 길이 = 6</li> |
| 64 | +<li><code>skill</code>의 각 행은 <code>[type, r1, c1, r2, c2, degree]</code>형태를 가지고 있습니다. |
| 65 | + |
| 66 | +<ul> |
| 67 | +<li>type은 1 혹은 2입니다. |
| 68 | + |
| 69 | +<ul> |
| 70 | +<li>type이 1일 경우는 적의 공격을 의미합니다. 건물의 내구도를 낮춥니다.</li> |
| 71 | +<li>type이 2일 경우는 아군의 회복 스킬을 의미합니다. 건물의 내구도를 높입니다.</li> |
| 72 | +</ul></li> |
| 73 | +<li>(r1, c1)부터 (r2, c2)까지 직사각형 모양의 범위 안에 있는 건물의 내구도를 degree 만큼 낮추거나 높인다는 뜻입니다. |
| 74 | + |
| 75 | +<ul> |
| 76 | +<li>0 ≤ r1 ≤ r2 < <code>board</code>의 행의 길이</li> |
| 77 | +<li>0 ≤ c1 ≤ c2 < <code>board</code>의 열의 길이 </li> |
| 78 | +<li>1 ≤ degree ≤ 500 </li> |
| 79 | +<li>type이 1이면 degree만큼 건물의 내구도를 낮춥니다.</li> |
| 80 | +<li>type이 2이면 degree만큼 건물의 내구도를 높입니다.</li> |
| 81 | +</ul></li> |
| 82 | +</ul></li> |
| 83 | +<li>건물은 파괴되었다가 회복 스킬을 받아 내구도가 1이상이 되면 파괴되지 않은 상태가 됩니다. 즉, 최종적으로 건물의 내구도가 1이상이면 파괴되지 않은 건물입니다.</li> |
| 84 | +</ul> |
| 85 | + |
| 86 | +<h5>정확성 테스트 케이스 제한 사항</h5> |
| 87 | + |
| 88 | +<ul> |
| 89 | +<li>1 ≤ <code>board</code>의 행의 길이 (= <code>N</code>) ≤ 100</li> |
| 90 | +<li>1 ≤ <code>board</code>의 열의 길이 (= <code>M</code>) ≤ 100</li> |
| 91 | +<li>1 ≤ <code>board</code>의 원소 (각 건물의 내구도) ≤ 100</li> |
| 92 | +<li>1 ≤ <code>skill</code>의 행의 길이 ≤ 100 |
| 93 | + |
| 94 | +<ul> |
| 95 | +<li>1 ≤ degree ≤ 100 </li> |
| 96 | +</ul></li> |
| 97 | +</ul> |
| 98 | + |
| 99 | +<h5>효율성 테스트 케이스 제한 사항</h5> |
| 100 | + |
| 101 | +<ul> |
| 102 | +<li>주어진 조건 외 추가 제한사항 없습니다.</li> |
| 103 | +</ul> |
| 104 | + |
| 105 | +<hr> |
| 106 | + |
| 107 | +<h5>입출력 예</h5> |
| 108 | +<table class="table"> |
| 109 | + <thead><tr> |
| 110 | +<th>board</th> |
| 111 | +<th>skill</th> |
| 112 | +<th>result</th> |
| 113 | +</tr> |
| 114 | +</thead> |
| 115 | + <tbody><tr> |
| 116 | +<td>[[5,5,5,5,5],[5,5,5,5,5],[5,5,5,5,5],[5,5,5,5,5]]</td> |
| 117 | +<td>[[1,0,0,3,4,4],[1,2,0,2,3,2],[2,1,0,3,1,2],[1,0,1,3,3,1]]</td> |
| 118 | +<td>10</td> |
| 119 | +</tr> |
| 120 | +<tr> |
| 121 | +<td>[[1,2,3],[4,5,6],[7,8,9]]</td> |
| 122 | +<td>[[1,1,1,2,2,4],[1,0,0,1,1,2],[2,2,0,2,0,100]]</td> |
| 123 | +<td>6</td> |
| 124 | +</tr> |
| 125 | +</tbody> |
| 126 | + </table> |
| 127 | +<hr> |
| 128 | + |
| 129 | +<h5>입출력 예 설명</h5> |
| 130 | + |
| 131 | +<p><strong>입출력 예 #1</strong></p> |
| 132 | + |
| 133 | +<p>문제 예시와 같습니다.</p> |
| 134 | + |
| 135 | +<p><strong>입출력 예 #2</strong></p> |
| 136 | + |
| 137 | +<p><초기 맵 상태></p> |
| 138 | + |
| 139 | +<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/aa43439f-3d2f-4307-97ce-5910105b4487/04_2022_%E1%84%80%E1%85%A9%E1%86%BC%E1%84%8E%E1%85%A2%E1%84%86%E1%85%AE%E1%86%AB%E1%84%8C%E1%85%A6_%E1%84%91%E1%85%A1%E1%84%80%E1%85%AC%E1%84%83%E1%85%AC%E1%84%8C%E1%85%B5%E1%84%8B%E1%85%A1%E1%86%AD%E1%84%8B%E1%85%B3%E1%86%AB%E1%84%80%E1%85%A5%E1%86%AB%E1%84%86%E1%85%AE%E1%86%AF_06.png" title="" alt="04_2022_공채문제_파괴되지않은건물_06.png"></p> |
| 140 | + |
| 141 | +<p>첫 번째로 적이 맵의 <strong>(1,1)부터 (2,2)까지 공격하여 4만큼</strong> 건물의 내구도를 낮추면 아래와 같은 상태가 됩니다.</p> |
| 142 | + |
| 143 | +<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/aa361925-45e4-4bd0-9ef7-e182ed1c6f03/04_2022_%E1%84%80%E1%85%A9%E1%86%BC%E1%84%8E%E1%85%A2%E1%84%86%E1%85%AE%E1%86%AB%E1%84%8C%E1%85%A6_%E1%84%91%E1%85%A1%E1%84%80%E1%85%AC%E1%84%83%E1%85%AC%E1%84%8C%E1%85%B5%E1%84%8B%E1%85%A1%E1%86%AD%E1%84%8B%E1%85%B3%E1%86%AB%E1%84%80%E1%85%A5%E1%86%AB%E1%84%86%E1%85%AE%E1%86%AF_07.png" title="" alt="04_2022_공채문제_파괴되지않은건물_07.png"></p> |
| 144 | + |
| 145 | +<p>두 번째로 적이 맵의 <strong>(0,0)부터 (1,1)까지 공격하여 2만큼</strong> 건물의 내구도를 낮추면 아래와 같은 상태가 됩니다.</p> |
| 146 | + |
| 147 | +<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/43c218a1-73c4-4d54-9568-0c21aa7f6365/04_2022_%E1%84%80%E1%85%A9%E1%86%BC%E1%84%8E%E1%85%A2%E1%84%86%E1%85%AE%E1%86%AB%E1%84%8C%E1%85%A6_%E1%84%91%E1%85%A1%E1%84%80%E1%85%AC%E1%84%83%E1%85%AC%E1%84%8C%E1%85%B5%E1%84%8B%E1%85%A1%E1%86%AD%E1%84%8B%E1%85%B3%E1%86%AB%E1%84%80%E1%85%A5%E1%86%AB%E1%84%86%E1%85%AE%E1%86%AF_08.png" title="" alt="04_2022_공채문제_파괴되지않은건물_08.png"></p> |
| 148 | + |
| 149 | +<p>마지막으로 아군이 맵의 <strong>(2,0)부터 (2,0)까지 회복하여 100만큼</strong> 건물의 내구도를 높이면 아래와 같은 상황이 됩니다.</p> |
| 150 | + |
| 151 | +<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/5190fee3-8e81-45b7-a79c-1dfc31d8e05f/04_2022_%E1%84%80%E1%85%A9%E1%86%BC%E1%84%8E%E1%85%A2%E1%84%86%E1%85%AE%E1%86%AB%E1%84%8C%E1%85%A6_%E1%84%91%E1%85%A1%E1%84%80%E1%85%AC%E1%84%83%E1%85%AC%E1%84%8C%E1%85%B5%E1%84%8B%E1%85%A1%E1%86%AD%E1%84%8B%E1%85%B3%E1%86%AB%E1%84%80%E1%85%A5%E1%86%AB%E1%84%86%E1%85%AE%E1%86%AF_09.png" title="" alt="04_2022_공채문제_파괴되지않은건물_09.png"></p> |
| 152 | + |
| 153 | +<p>총, 6개의 건물이 파괴되지 않았습니다. 따라서 6을 return 해야 합니다.</p> |
| 154 | + |
| 155 | +<hr> |
| 156 | + |
| 157 | +<h5>제한시간 안내</h5> |
| 158 | + |
| 159 | +<ul> |
| 160 | +<li>정확성 테스트 : 10초</li> |
| 161 | +<li>효율성 테스트 : 언어별로 작성된 정답 코드의 실행 시간의 적정 배수</li> |
| 162 | +</ul> |
| 163 | + |
| 164 | + |
| 165 | +> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges |
0 commit comments