Skip to content

Commit dc2ccec

Browse files
committed
[level 2] Title: 괄호 회전하기, Time: 26.98 ms, Memory: 91 MB -BaekjoonHub
1 parent 9c2b840 commit dc2ccec

File tree

2 files changed

+226
-0
lines changed

2 files changed

+226
-0
lines changed
Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
# [level 2] 괄호 회전하기 - 76502
2+
3+
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/76502)
4+
5+
### 성능 요약
6+
7+
메모리: 91 MB, 시간: 26.98 ms
8+
9+
### 구분
10+
11+
코딩테스트 연습 > 월간 코드 챌린지 시즌2
12+
13+
### 채점결과
14+
15+
정확성: 100.0<br/>합계: 100.0 / 100.0
16+
17+
### 제출 일자
18+
19+
2025년 07월 05일 17:17:13
20+
21+
### 문제 설명
22+
23+
<p>다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다.</p>
24+
25+
<ul>
26+
<li><code>()</code>, <code>[]</code>, <code>{}</code> 는 모두 올바른 괄호 문자열입니다.</li>
27+
<li>만약 <code>A</code>가 올바른 괄호 문자열이라면, <code>(A)</code>, <code>[A]</code>, <code>{A}</code> 도 올바른 괄호 문자열입니다. 예를 들어, <code>[]</code> 가 올바른 괄호 문자열이므로, <code>([])</code> 도 올바른 괄호 문자열입니다.</li>
28+
<li>만약 <code>A</code>, <code>B</code>가 올바른 괄호 문자열이라면, <code>AB</code> 도 올바른 괄호 문자열입니다. 예를 들어, <code>{}</code> 와 <code>([])</code> 가 올바른 괄호 문자열이므로, <code>{}([])</code> 도 올바른 괄호 문자열입니다.</li>
29+
</ul>
30+
31+
<p>대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 <code>s</code>가 매개변수로 주어집니다. 이 <code>s</code>를 왼쪽으로 x (<em>0 ≤ x &lt; (<code>s</code>의 길이)</em>) 칸만큼 회전시켰을 때 <code>s</code>가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요.</p>
32+
33+
<hr>
34+
35+
<h5>제한사항</h5>
36+
37+
<ul>
38+
<li>s의 길이는 1 이상 1,000 이하입니다.</li>
39+
</ul>
40+
41+
<hr>
42+
43+
<h5>입출력 예</h5>
44+
<table class="table">
45+
<thead><tr>
46+
<th>s</th>
47+
<th>result</th>
48+
</tr>
49+
</thead>
50+
<tbody><tr>
51+
<td><code>"[](){}"</code></td>
52+
<td>3</td>
53+
</tr>
54+
<tr>
55+
<td><code>"}]()[{"</code></td>
56+
<td>2</td>
57+
</tr>
58+
<tr>
59+
<td><code>"[)(]"</code></td>
60+
<td>0</td>
61+
</tr>
62+
<tr>
63+
<td><code>"}}}"</code></td>
64+
<td>0</td>
65+
</tr>
66+
</tbody>
67+
</table>
68+
<hr>
69+
70+
<h5>입출력 예 설명</h5>
71+
72+
<p><strong>입출력 예 #1</strong></p>
73+
74+
<ul>
75+
<li>다음 표는 <code>"[](){}"</code> 를 회전시킨 모습을 나타낸 것입니다.</li>
76+
</ul>
77+
<table class="table">
78+
<thead><tr>
79+
<th>x</th>
80+
<th>s를 왼쪽으로 x칸만큼 회전</th>
81+
<th>올바른 괄호 문자열?</th>
82+
</tr>
83+
</thead>
84+
<tbody><tr>
85+
<td>0</td>
86+
<td><code>"[](){}"</code></td>
87+
<td>O</td>
88+
</tr>
89+
<tr>
90+
<td>1</td>
91+
<td><code>"](){}["</code></td>
92+
<td>X</td>
93+
</tr>
94+
<tr>
95+
<td>2</td>
96+
<td><code>"(){}[]"</code></td>
97+
<td>O</td>
98+
</tr>
99+
<tr>
100+
<td>3</td>
101+
<td><code>"){}[]("</code></td>
102+
<td>X</td>
103+
</tr>
104+
<tr>
105+
<td>4</td>
106+
<td><code>"{}[]()"</code></td>
107+
<td>O</td>
108+
</tr>
109+
<tr>
110+
<td>5</td>
111+
<td><code>"}[](){"</code></td>
112+
<td>X</td>
113+
</tr>
114+
</tbody>
115+
</table>
116+
<ul>
117+
<li>올바른 괄호 문자열이 되는 x가 3개이므로, 3을 return 해야 합니다.</li>
118+
</ul>
119+
120+
<p><strong>입출력 예 #2</strong></p>
121+
122+
<ul>
123+
<li>다음 표는 <code>"}]()[{"</code> 를 회전시킨 모습을 나타낸 것입니다.</li>
124+
</ul>
125+
<table class="table">
126+
<thead><tr>
127+
<th>x</th>
128+
<th>s를 왼쪽으로 x칸만큼 회전</th>
129+
<th>올바른 괄호 문자열?</th>
130+
</tr>
131+
</thead>
132+
<tbody><tr>
133+
<td>0</td>
134+
<td><code>"}]()[{"</code></td>
135+
<td>X</td>
136+
</tr>
137+
<tr>
138+
<td>1</td>
139+
<td><code>"]()[{}"</code></td>
140+
<td>X</td>
141+
</tr>
142+
<tr>
143+
<td>2</td>
144+
<td><code>"()[{}]"</code></td>
145+
<td>O</td>
146+
</tr>
147+
<tr>
148+
<td>3</td>
149+
<td><code>")[{}]("</code></td>
150+
<td>X</td>
151+
</tr>
152+
<tr>
153+
<td>4</td>
154+
<td><code>"[{}]()"</code></td>
155+
<td>O</td>
156+
</tr>
157+
<tr>
158+
<td>5</td>
159+
<td><code>"{}]()["</code></td>
160+
<td>X</td>
161+
</tr>
162+
</tbody>
163+
</table>
164+
<ul>
165+
<li>올바른 괄호 문자열이 되는 x가 2개이므로, 2를 return 해야 합니다.</li>
166+
</ul>
167+
168+
<p><strong>입출력 예 #3</strong></p>
169+
170+
<ul>
171+
<li>s를 어떻게 회전하더라도 올바른 괄호 문자열을 만들 수 없으므로, 0을 return 해야 합니다.</li>
172+
</ul>
173+
174+
<p><strong>입출력 예 #4</strong></p>
175+
176+
<ul>
177+
<li>s를 어떻게 회전하더라도 올바른 괄호 문자열을 만들 수 없으므로, 0을 return 해야 합니다.</li>
178+
</ul>
179+
180+
<hr>
181+
182+
<p>※ 공지 - 2021년 4월 16일 테스트케이스가 추가되었습니다.</p>
183+
184+
185+
> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import java.util.*;
2+
3+
class Solution {
4+
public int solution(String s) {
5+
int n = s.length();
6+
7+
int cnt = 0;
8+
for(int i=0; i<n; i++){
9+
Stack<Character> stack = new Stack<>();
10+
boolean check = true;
11+
12+
innerLoop:
13+
for(int j=0; j<n; j++){
14+
int index = (j+i) % n;
15+
char c = s.charAt(index); // 선택된 문자
16+
17+
if(c == '[' || c == '(' || c == '{'){
18+
stack.push(c);
19+
}else{
20+
if(stack.isEmpty()){ // 닫힌 괄호가 들어갈 차례에 열린 괄호가 스택에 x -> 실패
21+
check = false;
22+
break innerLoop;
23+
}else{
24+
char top = stack.pop();
25+
if((c == ']' && top != '[') || (c == ')' && top != '(') || (c == '}' && top != '{')){ // 짝이 맞지 않는 경우 -> 실패
26+
check = false;
27+
break innerLoop;
28+
}
29+
}
30+
}
31+
}
32+
if(!stack.isEmpty()){
33+
check = false;
34+
}
35+
if(check == true) {
36+
cnt++;
37+
}
38+
}
39+
return cnt;
40+
}
41+
}

0 commit comments

Comments
 (0)