Skip to content

Latest commit

 

History

History
80 lines (70 loc) · 2.12 KB

File metadata and controls

80 lines (70 loc) · 2.12 KB

프로그래머스 Level2 : 2020 KAKAO BLIND RECRUITMENT 괄호 변환

import java.util.Stack;
class Solution {
     boolean isCorrectString(String w){ // 올바른 문자열인지 확인
        Stack<Character> stack = new Stack<>();
        
        for(char c : w.toCharArray()){
            if(c=='(') stack.push('(');
            else{
                if(!stack.isEmpty()){
                    stack.pop();
                } else { 
                    return false;
                }
            }    
        }
        if(!stack.isEmpty()){
            return false;
        } else{
            return true;
        }
     }
    
    String fixString(String w){
        int l = 0;  //'(' 갯수
        int r = 0;  //')' 갯수
        if(isCorrectString(w)) return w;
        
        //2
        int length = w.length();
        StringBuilder u = new StringBuilder();
        StringBuilder v = new StringBuilder();
        for(int i=0; i<length; i++){
            if(w.charAt(i)=='('){
                l++;
                u.append('(');
            } else{
                r++;  
                u.append(')');
            } 

            if(l==r){
                for(int j=i+1; j<length; j++){
                    v.append(w.charAt(j));
                }                
                break;
            }
        }
        
        //3
        if(isCorrectString(u.toString())){
            //3-1
            return u.append(fixString(v.toString())).toString();
        } else{ //4
            //4-1, 4-2, 4-3
            StringBuilder str = new StringBuilder();
            str.append('(');
            str.append(fixString(v.toString()));
            str.append(')');
            
            //4-4. 
            StringBuilder newU = new StringBuilder();
            for(int i=1; i<u.length()-1; i++){
                if(u.charAt(i)=='(') newU.append(')');
                else newU.append('(');
            }
            
            return str.append(newU).toString();
        }
    }
    
    public String solution(String p) {
        return fixString(p);
    }
}