|
| 1 | +# [level 3] 풍선 터트리기 - 68646 |
| 2 | + |
| 3 | +[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/68646) |
| 4 | + |
| 5 | +### 성능 요약 |
| 6 | + |
| 7 | +메모리: 62 MB, 시간: 211.90 ms |
| 8 | + |
| 9 | +### 구분 |
| 10 | + |
| 11 | +코딩테스트 연습 > 월간 코드 챌린지 시즌1 |
| 12 | + |
| 13 | +### 채점결과 |
| 14 | + |
| 15 | +정확성: 100.0<br/>합계: 100.0 / 100.0 |
| 16 | + |
| 17 | +### 제출 일자 |
| 18 | + |
| 19 | +2025년 03월 31일 12:19:09 |
| 20 | + |
| 21 | +### 문제 설명 |
| 22 | + |
| 23 | +<p>일렬로 나열된 n개의 풍선이 있습니다. 모든 풍선에는 서로 다른 숫자가 써져 있습니다. 당신은 다음 과정을 반복하면서 풍선들을 단 1개만 남을 때까지 계속 터트리려고 합니다.</p> |
| 24 | + |
| 25 | +<ol> |
| 26 | +<li>임의의 <strong>인접한</strong> 두 풍선을 고른 뒤, 두 풍선 중 하나를 터트립니다.</li> |
| 27 | +<li>터진 풍선으로 인해 풍선들 사이에 빈 공간이 생겼다면, 빈 공간이 없도록 풍선들을 중앙으로 밀착시킵니다.</li> |
| 28 | +</ol> |
| 29 | + |
| 30 | +<p>여기서 조건이 있습니다. 인접한 두 풍선 중에서 <strong>번호가 더 작은 풍선</strong>을 터트리는 행위는 최대 1번만 할 수 있습니다. 즉, 어떤 시점에서 인접한 두 풍선 중 번호가 더 작은 풍선을 터트렸다면, 그 이후에는 인접한 두 풍선을 고른 뒤 번호가 더 큰 풍선만을 터트릴 수 있습니다.</p> |
| 31 | + |
| 32 | +<p>당신은 어떤 풍선이 최후까지 남을 수 있는지 알아보고 싶습니다. 위에 서술된 조건대로 풍선을 터트리다 보면, 어떤 풍선은 최후까지 남을 수도 있지만, 어떤 풍선은 무슨 수를 쓰더라도 마지막까지 남기는 것이 <strong>불가능</strong>할 수도 있습니다.</p> |
| 33 | + |
| 34 | +<p>일렬로 나열된 풍선들의 번호가 담긴 배열 a가 주어집니다. 위에 서술된 규칙대로 풍선들을 1개만 남을 때까지 터트렸을 때 최후까지 남기는 것이 가능한 풍선들의 개수를 return 하도록 solution 함수를 완성해주세요.</p> |
| 35 | + |
| 36 | +<hr> |
| 37 | + |
| 38 | +<h5>제한 사항</h5> |
| 39 | + |
| 40 | +<ul> |
| 41 | +<li>a의 길이는 1 이상 1,000,000 이하입니다. |
| 42 | + |
| 43 | +<ul> |
| 44 | +<li><code>a[i]</code>는 i+1 번째 풍선에 써진 숫자를 의미합니다.</li> |
| 45 | +<li>a의 모든 수는 -1,000,000,000 이상 1,000,000,000 이하인 정수입니다.</li> |
| 46 | +<li>a의 모든 수는 서로 다릅니다.</li> |
| 47 | +</ul></li> |
| 48 | +</ul> |
| 49 | + |
| 50 | +<hr> |
| 51 | + |
| 52 | +<h5>입출력 예</h5> |
| 53 | +<table class="table"> |
| 54 | + <thead><tr> |
| 55 | +<th>a</th> |
| 56 | +<th>result</th> |
| 57 | +</tr> |
| 58 | +</thead> |
| 59 | + <tbody><tr> |
| 60 | +<td><code>[9,-1,-5]</code></td> |
| 61 | +<td>3</td> |
| 62 | +</tr> |
| 63 | +<tr> |
| 64 | +<td><code>[-16,27,65,-2,58,-92,-71,-68,-61,-33]</code></td> |
| 65 | +<td>6</td> |
| 66 | +</tr> |
| 67 | +</tbody> |
| 68 | + </table> |
| 69 | +<hr> |
| 70 | + |
| 71 | +<h5>입출력 예 설명</h5> |
| 72 | + |
| 73 | +<p>입출력 예 #1</p> |
| 74 | + |
| 75 | +<ul> |
| 76 | +<li>첫 번째 풍선(9가 써진 풍선)을 최후까지 남기는 방법은 다음과 같습니다. |
| 77 | + |
| 78 | +<ol> |
| 79 | +<li><code>[9, -1, -5]</code> 에서 -1, -5가 써진 풍선을 고른 뒤, -1이 써진 풍선(번호가 더 큰 것)을 터트립니다.</li> |
| 80 | +<li><code>[9, -5]</code> 에서 9, -5가 써진 풍선을 고른 뒤, -5가 써진 풍선(번호가 더 작은 것)을 터트립니다.</li> |
| 81 | +</ol></li> |
| 82 | +<li>두 번째 풍선(-1이 써진 풍선)을 최후까지 남기는 방법은 다음과 같습니다. |
| 83 | + |
| 84 | +<ol> |
| 85 | +<li><code>[9, -1, -5]</code> 에서 9, -1이 써진 풍선을 고른 뒤, 9가 써진 풍선(번호가 더 큰 것)을 터트립니다.</li> |
| 86 | +<li><code>[-1, -5]</code> 에서 -1, -5가 써진 풍선을 고른 뒤, -5가 써진 풍선(번호가 더 작은 것)을 터트립니다.</li> |
| 87 | +</ol></li> |
| 88 | +<li>세 번째 풍선(-5가 써진 풍선)을 최후까지 남기는 방법은 다음과 같습니다. |
| 89 | + |
| 90 | +<ol> |
| 91 | +<li><code>[9, -1, -5]</code> 에서 9, -1이 써진 풍선을 고른 뒤, 9가 써진 풍선(번호가 더 큰 것)을 터트립니다.</li> |
| 92 | +<li><code>[-1, -5]</code> 에서 -1, -5가 써진 풍선을 고른 뒤, -1이 써진 풍선(번호가 더 큰 것)을 터트립니다.</li> |
| 93 | +</ol></li> |
| 94 | +<li>3개의 풍선이 최후까지 남을 수 있으므로, 3을 return 해야 합니다.</li> |
| 95 | +</ul> |
| 96 | + |
| 97 | +<p>입출력 예 #2</p> |
| 98 | + |
| 99 | +<ul> |
| 100 | +<li>최후까지 남을 수 있는 풍선은 -16, -92, -71, -68, -61, -33이 써진 풍선으로 모두 6개입니다.</li> |
| 101 | +</ul> |
| 102 | + |
| 103 | + |
| 104 | +> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges |
0 commit comments