Contents
내가 작성한 코드
내가 작성한 코드
public class Solution {
public String solution(String p) {
// 1. 빈 문자열이면 그대로 반환
if (p.isEmpty()) {
return "";
}
// 2. 균형잡힌 문자열 u, v로 분리
int index = findBalancedIndex(p);
String u = p.substring(0, index + 1);
String v = p.substring(index + 1);
// 3. u가 올바른 문자열이면, v에 재귀 호출 후 u + v 반환
if (isCorrect(u)) {
return u + solution(v);
}
// 4. u가 올바르지 않으면, 변환 규칙 적용
StringBuilder sb = new StringBuilder();
sb.append("("); // 4-1
sb.append(solution(v)); // 4-2
sb.append(")"); // 4-3
sb.append(reverse(u.substring(1, u.length() - 1))); // 4-4
return sb.toString(); // 4-5
}
// 균형잡힌 괄호 문자열 분리 지점 찾는 메서드
private int findBalancedIndex(String str) {
int count = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '(') {
count++;
} else {
count--;
}
if (count == 0) {
return i;
}
}
return str.length() - 1; // 균형잡힌 괄호 문자열가 없을 때
}
// 올바른 괄호 문자열인지 확인하는 메서드
private boolean isCorrect(String str) {
int count = 0;
for (char c : str.toCharArray()) {
if (c == '(')
count++;
else {
if (count == 0)
return false;
count--;
}
}
return true;
}
// 괄호 방향 뒤집는 메서드
private String reverse(String str) {
StringBuilder sb = new StringBuilder();
for (char c : str.toCharArray()) {
sb.append(c == '(' ? ')' : '(');
}
return sb.toString();
}
}
Share article