[프로그래머스] 괄호 회전하기

떵호·2022년 1월 20일
0

알고리즘

목록 보기
5/8
post-thumbnail

문제 링크
https://programmers.co.kr/learn/courses/30/lessons/76502

📂 분류

스택 구현

💡 풀이

올바른 괄호 문제의 변형이 추가된 문제이다.

로직은 다음과 같다.
1. 현 문자열이 올바른 괄호 문자열인지 확인한다.
2. 문자열을 회전 시키고, 다시 원래의 문자열이 나타나기 전까지 1번을 진행한다.

위 로직을 구현해서 answer를 return 하면된다.

문제 자체는 쉬웠는데 아직 자바에 익숙하지 않아서 문제를 푸는데 오래걸렸다.

💻 코드

import java.util.*;

class Solution {
    StringBuffer brackets = new StringBuffer();

    public int solution(String s) {
        int answer = 0;
        brackets.append(s);

        while (true) {
            if (isCorrectBraket(brackets.toString())) answer += 1;
            rotateBraket();
            if (s.equals(brackets.toString())) break;
        }

        return answer;
    }

    public void rotateBraket() {
        char c = brackets.charAt(0);
        brackets.deleteCharAt(0);
        brackets.append(c);
    }

    public boolean isCorrectBraket(String s) {
        Stack<Character> st = new Stack<Character>();
        for (char c : s.toCharArray()) {
            if (c == '(') {
                st.push(c);
            } else if (c ==  ')'){
                if (st.empty()) return false;
                if (st.peek() == '(') st.pop();
            } else if (c == '{') {
                st.push(c);
            } else if (c ==  '}'){
                if (st.empty()) return false;
                if (st.peek() == '{') st.pop();
            } else if (c == '[') {
                st.push(c);
            } else if (c ==  ']'){
                if (st.empty()) return false;
                if (st.peek() == '[') st.pop();
            }
        }
        return st.empty();
    }
}

profile
꾸준히 해보자❗️

0개의 댓글