프로그래머스 괄호 회전하기 (Java, 자바)

jonghyukLee·2023년 8월 20일
0

이번에 풀어본 문제는
프로그래머스 괄호 회전하기 입니다.

📕 문제 링크

❗️코드

import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
class Solution {
    public int solution(String s) {
        int answer = 0;
        int length = s.length();

        Queue<Character> q = new LinkedList<>();

        for (int i = 0; i < length; i++) q.add(s.charAt(i));

        while (length-- > 0) {
            Queue<Character> tmp = new LinkedList<>(q);
            Stack<Character> stk = new Stack<>();
            boolean flag = true;
            while (!tmp.isEmpty()) {
                char next = tmp.poll();

                // '(', '[', '{'
                if (next == '(' || next == '[' || next == '{') stk.push(next);
                else if (next == ')') {
                    if (!stk.isEmpty() && stk.peek() == '(') stk.pop();
                    else {
                        flag = false;
                        break;
                    }
                }
                else if (next == ']') {
                    if (!stk.isEmpty() && stk.peek() == '[') stk.pop();
                    else {
                        flag = false;
                        break;
                    }
                }
                else if (next == '}') {
                    if (!stk.isEmpty() && stk.peek() == '{') stk.pop();
                    else {
                        flag = false;
                        break;
                    }
                }
            }
            if (flag && stk.isEmpty()) answer++;

            q.add(q.poll()); // 회전
        }
        return answer;
    }
}

📝 풀이

괄호로 이루어진 주어진 문자열에 대해 규칙을 만족하는 괄호 문자열인지를 확인하는 문제입니다.
길이만큼 문자열의 순서를 회전하면서 가능한 경우의 수가 몇 개인지 확인하면 됩니다.
괄호의 종류가 총 3개로 이루어져있기 때문에 조건을 나누어 확인해주면 되고, 확인하는 방식은 여느 괄호 문제와 동일하게 스택을 활용해서 풀어보았습니다.
문자열 회전은 기존 문자열 순서를 큐에 담아놓고, 앞의 괄호를 맨 뒤로 보내는 행위를 길이만큼 반복하여 수행했습니다.

profile
머무르지 않기!

0개의 댓글