본문 바로가기
알고리즘/프로그래머스

[프로그래머스 Lv2] 괄호 변환(Java)

by justkeepgoing 2021. 1. 7.
728x90
반응형

1. 문제

programmers.co.kr/learn/courses/30/lessons/60058?language=java

 

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

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

programmers.co.kr

2. 풀이

  • 고민 시간이 많이 들었다.
  • 차근차근 규칙에 따라 풀 수 있었다

3. 코드

class Solution {
    public String solution(String p) {
         String answer = "";
        if(p.length()==0) return "";
        int div = divide(p);
        String u = p.substring(0,div);
        String v = p.substring(div);
        if(isTrue(u)){
             answer += (u+solution(v));
        }else{
            String str = "("+solution(v)+")";
            u = u.substring(1,u.length()-1);
            answer += str+addition(u);
        }
        return answer;
    }
    static String addition(String v){
        StringBuilder sb = new StringBuilder();
        for(int i =0 ;i<v.length(); i++){
            if(v.charAt(i)==')'){
                sb.append("(");
            }else sb.append(")");
        }
        return sb.toString();
    }
    static boolean isTrue(String u){
        int cnt=0;
        for(int i =0; i<u.length(); i++){
            if(u.charAt(i)=='(') cnt++;
            else cnt--;
            if(cnt<0) return false;
        }

        return true;
    }
    static int divide(String p){
        int p1=0;
        int p2=0;
        for(int i =0; i<p.length(); i++){
            if(p.charAt(i)=='('){
                p1++;
            }else p2++;
            if(p1==p2) return i+1;
        }
        return 0;
    }
}

 

반응형

 

반응형