본문 바로가기
Problem Solving

[프로그래머스] L2 괄호 변환 / 2020 카카오 블라인드 채용

by JYHAN 2020. 12. 15.

카카오

[프로그래머스] L2 괄호 변환 / 2020 카카오 블라인드 채용

[풀이]

구현이 까다로워 여러번 실패를 했지만, 주어진 조건에 맞추어 자~~알 구현하는 것이 정답이었다...

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
class Solution {
    public static String solution(String p) {
        String answer = "";
        if(p.equals("")) return answer; // 1.빈문자열
        else{
            if(check(p)) answer = p; // p가 올바르다
            else answer = solve(p);  // p가 올바르지 않다
        }
        return answer;
    }
    public static String solve(String p){
        if(p.equals("")) return "";
        
        int idx = findIdx(p); // 2.u,v로 분리
        String u = p.substring(0,idx);
        String v = p.substring(idx,p.length());
        
        if(check(u)){ // 3.올바른 u
            return u + solve(v);
        }
        else { // 4.올바르지 않은 u
            String str = "("+solve(v)+")";  // 4-1.~4-3
            u = u.substring(1,u.length()-1);// 4-4. u의 시작, 끝 문자를 제거하고
            u = makeReverse(u);             // '('->')' ')'->'('
            return str + u;
        }
    }
    public static int findIdx(String p){
        int sum = 0, idx = 0;
        for(int i=0; i<p.length(); i++){
            if(i>0 && sum==0){
                idx = i;
                break;
            }
            char c = p.charAt(i);
            if(c=='(') sum += 1;
            else if(c==')') sum -= 1;
        }
        return idx==0?p.length():idx;
    }
    public static boolean check(String p){
        int sum = 0;
        for(int i=0; i<p.length(); i++){
            char c = p.charAt(i);
            if(c=='(') sum += 1;
            else if(c==')') sum -= 1;
            if(sum<0return false;
        }
        return true;
    }
    public static String makeReverse(String p){
        char[] pArr = p.toCharArray();
        for(int i=0; i<pArr.length; i++){
            if(pArr[i]==')') pArr[i] = '(';
            else pArr[i] = ')';
        }
        return String.valueOf(pArr);
    }
}
cs

댓글