[Programmers] - 괄호 회전하기 (Stack)

Jobmania·2023년 4월 13일
0

문제

문제

이전에 활용한 스택 문제와 유사하다. ex) ' ( ' 가 무조건! 먼저 와야지 ' ) ' 가 올 수 있음!

풀이


import java.util.Stack;

class Solution {
    public int solution(String s) {
        int answer = 0;
        if (checkStack(s)) {
            answer++;
        }

        for (int i = 1; i < s.length(); i++) {
            s = rotateString(s);
            if (checkStack(s)) {
                answer++;
            }
        }


        return answer;
    }

    private String rotateString(String s) {
        char firstChar = s.charAt(0);
        return s.substring(1) + firstChar;
    }

    private boolean checkStack(String s) {


        Stack<String> stack = new Stack<>();


        for (int i = 0; i < s.length(); i++) {
            String c = String.valueOf(s.charAt(i));
            if (s.charAt(i) == '[' || s.charAt(i) == '{' || s.charAt(i) == '(') {
                stack.push(c);
            } else {
                if (!stack.isEmpty()) {
                    switch (c) {
                        case "]":
                            checkPeekAndDelete(stack, "[");
                            break;
                        case "}":
                            checkPeekAndDelete(stack, "{");
                            break;
                        case ")":
                            checkPeekAndDelete(stack, "(");
                            break;
                    }
                } else {
                    stack.push(c);
                }

            }
        }
        return stack.isEmpty();
    }

    private static void checkPeekAndDelete(Stack<String> stack, String close) {
        if (stack.peek().equals(close)) {
            stack.pop();
        }
    }

}
  • 정상적인 괄호라면 stack.isEmpty() 가 true.
  • 하나라도 비정상이면 내부에는 데이터가 남아 있음.
profile
HelloWorld에서 RealWorld로

0개의 댓글