Skip to content

Commit e2c2d25

Browse files
committed
[level 3] Title: 풍선 터트리기, Time: 211.90 ms, Memory: 62 MB -BaekjoonHub
1 parent 2aeabdd commit e2c2d25

File tree

2 files changed

+115
-0
lines changed

2 files changed

+115
-0
lines changed
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
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
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
def solution(a):
2+
result = [False for _ in a]
3+
minfront, minback = float('inf'), float('inf')
4+
for i in range(len(a)):
5+
if a[i] < minfront:
6+
minfront = a[i]
7+
result[i] = True
8+
if a[-1-i] < minback:
9+
minback = a[-1-i]
10+
result[-1-i] = True
11+
return sum(result)

0 commit comments

Comments
 (0)