[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