프로그래머스-괄호 변환

이호영·2022년 4월 5일
0
import java.util.Stack;

class Solution {

    static Stack<Character> stack = new Stack<>();

    public String solution(String p) {
        String answer = "";

        if(!p.equals("")) {
            answer = search(p);
        }

        return answer;
    }

    public static String search(String p) {
        Solution b = new Solution();
        String str = "";

        if(!p.equals("")) {
            String u = b.set_u(p);
            String v = p.substring(u.length());

            if(b.corret_Bracket(u)) {
                stack.clear();
                str = u + search(v);
            }else {
                stack.clear();
                StringBuilder sb = new StringBuilder();
                sb.append('(');
                sb.append(search(v));
                sb.append(')');

                StringBuilder new_u = new StringBuilder(u);
                new_u.deleteCharAt(0);
                new_u.deleteCharAt(new_u.length() - 1);
                sb.append(b.change_u(new_u.toString()));

                str = sb.toString();
            }
        }

        return str;
    }

    public String change_u(String u) {
        StringBuilder sb = new StringBuilder();

        for(int i = 0; i < u.length(); i++) {
            if(u.charAt(i) == ')') {
                sb.append('(');
            }else {
                sb.append(')');
            }
        }

        return sb.toString();
    }

    public String set_u(String p) {
        StringBuilder sb = new StringBuilder();
        sb.append(p.charAt(0));
        stack.push(p.charAt(0));

        for(int i = 1; i < p.length(); i++) {
            if(p.charAt(i) == '(' && stack.peek() == ')') {
                sb.append(p.charAt(i));
                stack.pop();
            }else if(p.charAt(i) == ')' && stack.peek() == '(') {
                sb.append(p.charAt(i));
                stack.pop();
            }else {
                sb.append(p.charAt(i));
                stack.push(p.charAt(i));
            }

            if(stack.empty()) {
                break;
            }
        }

        stack.clear();
        return sb.toString();
    }

    public boolean corret_Bracket(String u) {
        stack.push(u.charAt(0));

        for(int i = 1; i < u.length(); i++) {
            if(u.charAt(i) == ')' && stack.peek() == '(') {
                stack.pop();
            }else {
                stack.push(u.charAt(i));
            }
        }

        return stack.empty();
    }
}

0개의 댓글