Skip to content

Commit eaaf71f

Browse files
authored
Update 4.java
1 parent 77fa1e4 commit eaaf71f

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

13/4.java

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import java.util.*;
2+
3+
class Solution {
4+
5+
// "균형잡힌 괄호 문자열"의 인덱스 반환
6+
public int balancedIndex(String p) {
7+
int count = 0; // 왼쪽 괄호의 개수
8+
for (int i = 0; i < p.length(); i++) {
9+
if (p.charAt(i) == '(') count += 1;
10+
else count -= 1;
11+
if (count == 0) return i;
12+
}
13+
return -1;
14+
}
15+
16+
// "올바른 괄호 문자열"인지 판단
17+
public boolean checkProper(String p) {
18+
int count = 0; // 왼쪽 괄호의 개수
19+
for (int i = 0; i < p.length(); i++) {
20+
if (p.charAt(i) == '(') count += 1;
21+
else {
22+
if (count == 0) { // 쌍이 맞지 않는 경우에 false 반환
23+
return false;
24+
}
25+
count -= 1;
26+
}
27+
}
28+
return true; // 쌍이 맞는 경우에 true 반환
29+
}
30+
31+
public String solution(String p) {
32+
String answer = "";
33+
if (p.equals("")) return answer;
34+
int index = balancedIndex(p);
35+
String u = p.substring(0, index + 1);
36+
String v = p.substring(index + 1);
37+
// "올바른 괄호 문자열"이면, v에 대해 함수를 수행한 결과를 붙여 반환
38+
if (checkProper(u)) {
39+
answer = u + solution(v);
40+
}
41+
// "올바른 괄호 문자열"이 아니라면 아래의 과정을 수행
42+
else {
43+
answer = "(";
44+
answer += solution(v);
45+
answer += ")";
46+
u = u.substring(1, u.length() - 1); // 첫 번째와 마지막 문자를 제거
47+
String temp = "";
48+
for (int i = 0; i < u.length(); i++) {
49+
if (u.charAt(i) == '(') temp += ")";
50+
else temp += "(";
51+
}
52+
answer += temp;
53+
}
54+
return answer;
55+
}
56+
}

0 commit comments

Comments
 (0)