본문 바로가기
Algorithm/프로그래머스풀이

[알고리즘 문제풀이] 프로그래머스 - 괄호 변환 / JAVA(자바)

by 계범 2022. 2. 20.

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

 

코딩테스트 연습 - 괄호 변환

카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를

programmers.co.kr

 

/**
    1. 재귀 구현 풀이
    
    2. 해당 문자열이 올바른지 체크 함수
    
    3. 해당 문자열 분리 함수
    
**/

import java.util.*;

class Solution {
    public String solution(String p) {
        String answer = "";
        
        answer = solve(p);
        return answer;
    }
    
    public String solve(String p){
        
        if(p.equals("")){
            return "";
        }
        
        String[] uv = checkBalance(p);
        
        String u = uv[0];
        String v = uv[1];
        
        if(checkCorrect(u)){
            return u+solve(v);
        }else{
            String ans = "(";
            ans += solve(v);
            ans += ")";

            String temp = "";
            for(int i = 1; i < u.length()-1; i++){
                if(u.charAt(i) == '('){
                    temp += ")";
                }else{
                    temp += "(";
                }
            }

            ans += temp;

            return ans;
        }
    }
    
    // 올바른 문자열인지 체크 함수
    public boolean checkCorrect(String u){
        
        Stack<Character> stack = new Stack<>();
        
        for(int i = 0; i < u.length(); i++){
            if(u.charAt(i) == '('){
                stack.push('(');
            }else{
                if(!stack.isEmpty() && stack.peek() == '('){
                    stack.pop();
                }else{
                    return false;
                }
            }
        }
        
        return stack.isEmpty();
    }
    
    // 균형잡힌 괄호 문자열 분리 함수
    public String[] checkBalance(String p){
        
        int cnt = 0;
        int cnt2 = 0;
        
        String u = "";
        String v = "";
        for(int i = 0; i < p.length(); i++){
            char c = p.charAt(i);
            if(c == '(') cnt++;
            else cnt2++;
            
            if(cnt != 0 && cnt == cnt2){
                u = p.substring(0,i+1);
                v = p.substring(i+1,p.length());
                break;
            }
        }
        
        return new String[] {u,v};
    }
}

댓글