[programmers] 괄호 변환

https://school.programmers.co.kr/learn/courses/30/lessons/60058

class Solution {
    public String solution(String p) {
        
        if(p.isEmpty()) return "";
        
        String[] split = splitBalanced(p);
        String u = split[0];
        String v = split[1];
        
        if(isCorrect(u)){
            return u + solution(v);
        }else{
            StringBuilder sb = new StringBuilder();
            sb.append("(");
            sb.append(solution(v));
            sb.append(")");
            sb.append(reverse(u.substring(1, u.length() - 1)));
            return sb.toString();
        }
    }
    
    private String[] splitBalanced(String p){
        int count = 0;
        int i = 0;
        for(;i < p.length(); i++){
            if(p.charAt(i) =='(') count++;
            else count--;
            
            if(count ==0) break;
        }
        
        String u = p.substring(0, i+1);
        String v = p.substring(i+1);
        return new String[]{u,v};
    }
    
    private boolean isCorrect(String s){
        int count = 0;
        for(char c : s.toCharArray()){
            if(c == '(') count++;
            else{
                count--;
                if(count < 0 ) return false;
            }
        }
        return count == 0;
    }
    
    private String reverse(String s){
        StringBuilder sb = new StringBuilder();
        for(char c : s.toCharArray()){
            sb.append(c == '(' ? ')' : '(');
        }
        return sb.toString();
    }
}

© 2023 Lee. All rights reserved.