728x90
문제에서 하라는대로 하면 되긴 하는데
좀 그냥 헷갈림..ㅠ
마지막 부분 UInfo Class에서 생성자에서 parameter를 isMatched가 아니라 isMached로 잘못써서
자꾸 false값만 나오길래 곤경에 빠졌었다..
this.isMatched = isMatched가
this.isMatched = this.isMatched가 된듯.. 그러니 boolean기본값인 false만 계속 박혔었던 것 같다
class Solution {
public String solution(String p) {
return divideUV(new StringBuilder(p)).toString();
}
private StringBuilder divideUV(StringBuilder sb){
if(sb.length()==0) return sb; // ""는 ""리턴
UInfo uInfo = findUInfo(sb);
boolean isMatched = uInfo.isMatched;
int idx = uInfo.uFinalIndex;
// System.out.println(isMatched);
// System.out.println(idx);
String uStr = sb.substring(0, idx);
String vStr = sb.substring(idx, sb.length());
// System.out.println(uStr);
// System.out.println(vStr);
StringBuilder u = new StringBuilder(sb.substring(0, idx));
StringBuilder v = divideUV(new StringBuilder(sb.substring(idx,sb.length())));
// 3. 문자열 u가 "올바른 괄호 문자열" 이라면
if(isMatched){
return u.append(v);
}
// 4. 문자열 u가 "올바른 괄호 문자열"이 아니라면
else{
StringBuilder ret = new StringBuilder();
ret.insert(0,'(');
ret.append(v);
ret.append(')');
ret.append(modifiedU(u)); // 4-4
return ret;
}
}
private StringBuilder modifiedU(StringBuilder u){
String uStr = u.toString();
StringBuilder modifiedU = new StringBuilder();
for(int i=1; i<uStr.length()-1; i++){
char c = (uStr.charAt(i)=='(')? ')' : '(';
modifiedU.append(c);
}
return modifiedU;
}
private UInfo findUInfo(StringBuilder sb){
int check = 0; // ( 나오면 +, ) 나오면 -
int i = 0;
boolean isMatched = true;
for(; i<sb.length(); i++){
check = (sb.charAt(i)=='(')? check+1 : check-1;
if(check < 0){ // check가 한순간이라도 음수라면 "올바른 괄호 문자열"이 아니다.
isMatched = false;
}
if(check == 0)
break;
}
return new UInfo(isMatched, i+1);
}
private class UInfo{
boolean isMatched;
int uFinalIndex;
public UInfo(boolean isMatched, int uFinalIndex){
this.isMatched = isMatched;
this.uFinalIndex = uFinalIndex;
}
}
}
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][JAVA] 거리두기 확인하기 (DFS) (0) | 2022.03.19 |
---|---|
[프로그래머스][JAVA] [1차] 뉴스 클러스터링 (문자열) (0) | 2022.03.19 |
[프로그래머스][JAVA] 메뉴 리뉴얼 (조합, 백트래킹) (0) | 2022.03.18 |
[프로그래머스][JAVA] 행렬 테두리 회전하기 (구현) (0) | 2022.03.18 |
[프로그래머스][JAVA] 짝 지어 제거하기 (스택) (0) | 2022.03.17 |