문자열에 대해 괄호 검사 를 하는 매우 간단한 문제로

추가적인 기능으로 해당 문자열을 회전하는 기능 을 추가적으로 요구한다.

단순한 기능 두 요구사항 구현으로 완료되는 문제


풀이

먼저 문자열을 회전하는 기능을 구현해보자

회전이라고는 하지만, 전체 문자열중 맨 앞 문자를 맨뒤에 붙혀주면 되는 간단한 기능이다

private String rotate(String input) {
    StringBuilder sb = new StringBuilder(input.substring(1));
    sb.append(input.charAt(0));
    return sb.toString();
}

다음으로는 문자열이 올바른 괄호 문자열인지 확인하는 기능을 구현해보자

대부분의 괄호가 닫혀있는지 확인할때는 스택을 쓰면 편하게 구현이 가능하다

입력 문자열을 문자별로 순회하면서

각 괄호 문자별(( ) , { } , [ ])로 확인, 이전 문자가 상응하는 문자의 경우에만 스택에서 제거한다

입력 문자열은 괄호들로 이루어진 문자열이기에

이외의 문자의 경우 새로운 괄호로 생각하여, 스택에서 추가한다.

모든 문자열을 순회하였을때, 올바른 괄호 문자열의 경우 스택이 비워져 있어야 한다.

아래는 구현 해당 기능을 구한 예시이다

private boolean isBracketsClosed(String input) {
    Stack<Character> stack = new Stack<>();
    for (char c : input.toCharArray()) {
        switch (c) {
            case ')':
                if (!stack.isEmpty() && stack.peek() == '(') {
                    stack.pop();
                    break;
                }
            case '}':
                if (!stack.isEmpty() && stack.peek() == '{') {
                    stack.pop();
                    break;
                }
            case ']':
                if (!stack.isEmpty() && stack.peek() == '[') {
                    stack.pop();
                    break;
                }
            default:
                stack.add(c);
        }
    }
    return stack.isEmpty();
}

참조