본문 바로가기
알고리즘 & 자료구조/프로그래머스

괄호 회전하기

by 신재권 2023. 1. 14.
package programmers;

import java.util.Stack;

public class 괄호회전하기 {

   public static int solution(String s) {

      int answer = 0;
      if (isProper(s)) {
         answer++;
      }

      for (int x = 1; x < s.length(); x++) {
         s = rotationBracket(s);
         if (isProper(s)) {
            answer++;
         }
      }

      return answer;
   }

   //괄호 회전하는 함수
   private static String rotationBracket(String s) {
      return s.substring(1) + s.charAt(0);
   }

   //올바른 괄호 문자열인지 검사하는 함수
   private static boolean isProper(String s) {
      Stack<Character> stack = new Stack<>();

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

      return stack.isEmpty();
   }

   private static void isProperBracket(Stack<Character> stack, char bracket) {
      if (stack.peek() == bracket) {
         stack.pop();
      }
   }

   //1 <= s <= 1000
   //0 <= x<= s, x 칸 만큼 왼쪽으로 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수
   //왼쪽 회전
   // [](){} -> ](){}[ -> (){}[]

   public static void main(String[] args) {
      System.out.println(solution("[](){}") == 3);
      System.out.println(solution("}]()[{") == 2);
      System.out.println(solution("[)(]") == 0);
      System.out.println(solution("}}}") == 0);
   }
}

'알고리즘 & 자료구조 > 프로그래머스' 카테고리의 다른 글

N^2 배열 자르기  (0) 2023.01.18
튜플  (0) 2023.01.16
행렬의 곱셈  (0) 2023.01.13
캐시  (0) 2023.01.12
H-Index  (0) 2023.01.11