[Java 알고리즘] ToCharArray() 함수를 활용하여 문제풀이

ToCharArray() 함수는 String을 Char[]을 return 한다. 그래서 향상된 for문으로 한자리수씩 꺼낼 수 있다.

주로 String 값의 형식을 알아내는데 사용되고, 아래 문제에서는 ( )의 개수를 알아내는데 사용 되었다.

 

[문제]

유효한 () 만 return, 만약에 "("가 뒤에 ")"가 없거나 " )" 가 먼저 나오는 경우는 제거 해야함.

 

package public class ToCharArrayExaple {
    public static void main(String[] args) {
        //	String s = "(a(b(c)d)";
        //  String s = "(((a(b(c(e(f)d))";
        //  String s = "in(f(lea)r)n)";
        //  String s = "a)b(c)d";
        //  String s = "a)b(c)d";
        //  String s = "a)b(c)d)";

        //	String s = "(()))";
        //	String s = "(()";
        	String s = ")()(";

        System.out.println(new ToCharArrayExaple().solve(s));
    }

    public String solve(String str) {
        // () 개수 알아내기 위한 용도
        StringBuilder sb = new StringBuilder();
        // 출력용도
        StringBuilder result = new StringBuilder();
        int openBrace = 0;

        // ( ) 개수 알아내기
        // toCharArray() => char[] return
        for(char a : str.toCharArray()) {
            if(a == '(') {
                openBrace++;
            } else if(a == ')') {
                // openBrace가 0인데 )가 나오면 쓸모가없다.
                if(openBrace==0) continue;
                openBrace--;
            }
            sb.append(a);
        }


        for(int i = sb.length()-1; i>=0; i--) {
            if(sb.charAt(i) == '(' && openBrace != 0) {
                openBrace--;
                continue;
            }
            // 앞에서 부터 저장하면 )( 나온다.
            result.append(sb.charAt(i)).reverse();
        }

        return result.toString();
    }

 

 

String 값이 ")()(" 일때 result를 앞에서 부터 저장한다면 )( 가 출력 되므로 뒤에서 부터 저장해야 한다.  말로만해선 이해가 안되니 앞에서 부터 저장해본다음 디버깅을 해봐야 한다.

 

 

참고]

인프런 강의 / 코딩테스트 전 꼭 알아야 할 개념과 문제(with 자바) / 푸샵맨 코딩스터디 

댓글

Designed by JB FACTORY