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

uni.gy·2024년 3월 7일
0

알고리즘

목록 보기
47/61

문제

풀이

  • 회전시킨 문자열 하나씩 검사
  • 문자 하나씩 차례대로 스택에 넣고 다시 꺼내면서 검사한다.
  • 스택에서 이전에 나온 문자를 기록해두고 비교해준다.

코드

import java.util.*;
class Solution {
    public int solution(String s) {
        int answer = 0;
        for(int i=0;i<s.length();i++){
            StringBuilder sb=new StringBuilder();
            sb.append(s.substring(i,s.length()));
            sb.append(s.substring(0,i));
            boolean ret=func(sb.toString());
            if(ret)answer++;
        }
        return answer;
    }
    
    static boolean func(String str){
        if(str.length()==1)return false;
        Stack<Character> stack=new Stack<>();
        int s=0,m=0,b=0;
        for(int i=0;i<str.length();i++)stack.add(str.charAt(i));
        char pre='.';
        while(!stack.isEmpty()){
            char c=stack.pop();
            if(c==')')s++;
            else if(c=='('){
                if(s==0)return false;
                if(pre=='}' || pre==']')return false;
                else s--;
            }
            else if(c=='}')m++;
            else if(c=='{'){
                if(m==0)return false;
                if(pre==')' || pre==']')return false;
                else m--;
            }
            else if(c==']')b++;
            else if(c=='['){
                if(b==0)return false;
                if(pre==')' || pre=='}')return false;
                else b--;
            }
            pre=c;
        }
        if(s!=0 || m!=0 || b!=0)return false;
        return true;
    }
}

#스택

profile
한결같이

0개의 댓글