프로그래머스[Level2] - 괄호 변환 [문자열][2020 KAKAO BLIND RECRUITMENT] - Java :: 매운코딩
728x90
300x250

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

 

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

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

programmers.co.kr

 

재귀와 substring의 문제..

처음에 문제 자체가 이해가 안돼서 이해하는데만 10분이 넘게걸렸다..

그냥 이해하려고 하지말고 하라는대로 구현하는게 답인듯.......

import java.util.*;

class Solution {
    public static Stack<Character> stack = new Stack<Character>();
    
    public String solution(String p) {
        String answer = p;
        
        //올바른 괄호 여부확인
        if(!isGood(p)){
            //문자열 작업
            answer= solve(p);
        } 
        return answer;
    }
    
    
    public boolean isGood(String p){
        
        for(int i = 0; i<p.length();i++) {
            Character ch = p.charAt(i);
            
            if(ch=='('){
                stack.push('(');
            }
            else{
                if(!stack.isEmpty()){
                    stack.pop();
                }else{
                    return false;
                }
            }
            
        }
        
        return true;
    }
    
    public String solve(String w){
        // System.out.println(w);
        if(w.length()==0)
            return "";
        
        int left = 0, right= 0;
        String u ="";
        String v ="";
        
        //u와 v분리
        for(int i = 0;i<w.length();i++){
            Character ch = w.charAt(i);
            if(ch=='('){
                left++;
            } else {
                right++;
            }
            
            if(left==right){
                u = w.substring(0,i+1);
                v = w.substring(i+1,w.length());
                break;
            }
        }
                
        //u가 올바른 문자열인가?
        if(!isGood(u)){
            
            //새로운 문자열 만들기..
            String str = "";    
            
            str="("+solve(v)+")";

            // 앞뒤 문자 제거
            u = u.substring(1,u.length()-1);
            //나머지 문자 괄호방향 뒤집기
            u = u.replace("(","*");
            u = u.replace(")","(");
            u = u.replace("*",")");
            
            return str+u;
        }
        else {
            //v에 대해 재귀수행
            return u+solve(v);
        }
        
    }
}
728x90

+ Recent posts