프로그래밍 공방

[프로그래머스] 괄호 변환 본문

개발/문제해결

[프로그래머스] 괄호 변환

hyosupsong 2021. 1. 20. 21:19

문제

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

 

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

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

programmers.co.kr

문제해결방법

균형잡힌 괄호 문자열을 올바른 괄호 문자열로 바꿔주는 과정을 그대로 짜주었다.

1. u, v를 분리하는 과정 -> '('와 ')'의 개수가 동일하게 되는 부분을 u로, 나머지를 v로 분리한다.

2. 올바른 괄호 문자열을 판단하는 방법

괄호 문자열의 앞에서부터 '('의 개수를 세주며 ')'가 나오면 '('의 개수를 차감해준다.
만약 '('가 나왔는데 '('의 개수가 0개이면 false, 문자열을 다 돌았는데 '('의 개수가 1이상이면 false,
이외의 경우는 true이다.

코드

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
60
61
package Programmers;
 
public class Solution_괄호변환 {
 
    public static boolean isRightOrder(String u) {
        int l = 0;
        for(int i=0; i<u.length(); i++) {
            char c = u.charAt(i);
            if(c=='(') l++;
            else {
                if(l==0return false;
                else l--;
            }
        }
        if(l!=0return false;
        return true;
    }
    
    public static String[] second(String p) {
        String[] uv = {""""};
        int index = 0, l = 0, r = 0;
        for(index=0; index<p.length(); index++)
        {
            uv[0]+=p.charAt(index);
            if(p.charAt(index)=='(') l++;
            else r++;
            if(l==r) break;
        }
        index++;
        for(;index<p.length(); index++) uv[1+= p.charAt(index);
        return uv;
    }
 
    public static String first(String p) {
        if(p.equals("")) return p;
        String[] uv = second(p);
        String finalString = "";
        if(isRightOrder(uv[0])) {
            finalString = uv[0+ first(uv[1]);
        } else {
            finalString = "(" + first(uv[1]) + ")";
            for(int i=1; i<uv[0].length()-1; i++) {
                char ch = uv[0].charAt(i)=='('?')':'(';
                finalString += ch;
            }
            
        }
        return finalString;
     }
 
    public static String solution(String p) {
        String answer = "";
        answer = first(p);
        return answer;
    }
    
    public static void main(String[] args) {
        String p = "()))((()";
        System.out.println(solution(p));
    }
}
cs


코드에 대한 피드백이나 더 좋은 아이디어는 언제나 환영입니다.