1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/60058
2. 풀이 과정
1. 균형 잡힌 괄호 문자열 + 올바른 괄호 문자열을 동시에 확인한다.
- 열린 괄호가 오면 +1, 닫힌 괄호가 오면 -1 => 중간에 한 번이라도 음수가 되면, 올바른 괄호 문자열이 아니다.
2. u가 올바른 괄호 문자열인지에 따라, 다르게 처리하고 재귀함수를 돌린다.
- '올바른'이면, u + 재귀(v)
- '올바른'이 아니면, ( 재귀(v) ) + 뒤집은 u
class Solution {
public String solution(String p) {
if(p.equals("")){
return "";
}
//1. 최소 균형 잡힌 괄호 문자열 u 찾기 + 올바른 괄호 문자열 확인
int n = p.length();
int pair=0, i=0;
boolean isRight = true;
do{
if(p.charAt(i)=='('){pair++;}
else{pair--;}
//닫는 문자열이 먼저 나올 경우
if(pair<0){
isRight = false;
}
i++;
}while(pair!=0);
//2. 올바른 문자열인지 판단 후, 재귀
if(isRight){
StringBuilder sb = new StringBuilder();
sb.append(p.substring(0, i)).append(solution(p.substring(i, n)));
return sb.toString();
}
else{
String u = "";
int size = i-1;
//뒤집기
for(int a=1; a<size; a++){
switch(p.charAt(a)){
case '(':
u+=")";
break;
case ')':
u+="(";
break;
}
}
StringBuilder sb = new StringBuilder();
sb.append("(").append(solution(p.substring(i, n))).append(")").append(u);
return sb.toString();
}
}
}
'코딩문제풀이 > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 : 피로도 (0) | 2022.09.01 |
---|---|
[Java] 프로그래머스 : 전력망을 둘로 나누기 (0) | 2022.08.24 |
[Java] 프로그래머스 : 퍼즐 조각 채우기 (0) | 2022.08.05 |
[Java] 여행경로 (0) | 2022.06.27 |
[Java] 징검다리* (0) | 2022.06.27 |