Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

Life Engineering

[프로그래머스] 괄호 회전하기 (Java) 본문

Problem Solving

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

흑개 2022. 1. 31. 17:19

https://programmers.co.kr/learn/courses/30/lessons/76502

 

코딩테스트 연습 - 괄호 회전하기

 

programmers.co.kr

import java.util.Stack;

class Solution {
    static char[] open={'[','(','{'};
    static char[] close={']',')','}'};
    public int solution(String s) {
        int answer = 0;
        String rotate=s;
        for (int i=0; i<s.length(); i++){
            if (isRight(rotate)){
                answer++;
            }
            rotate=rotate.substring(1)+rotate.charAt(0);
        }
        return answer;
    }
    
    public boolean isRight(String s){
        Stack<Character> st=new Stack<>();
        boolean answer=true;
        for (int i=0; i<s.length(); i++){
            char c=s.charAt(i);
            if (c=='[' || c=='(' || c=='{'){
                st.push(c);
            }
            else{
                if (st.empty()){
                    answer=false;
                    break;
                }
                if (open[search(c)]==st.peek()){
                    st.pop();
                }
                else{
                    answer=false;
                    break;
                }
            }
        }
        if (!st.empty()){
            answer=false;
        }
        return answer;
    }
    
    public int search(char c){
        int num=-1;
        for (int i=0; i<3; i++){
            if (c==close[i]){
                num=i;
                break;
            }
        }
        return num;
    }
}

스택을 이용해 풀이하는 문제.

열린 괄호가 나왔을 땐 스택에 넣어주고, 닫힌 괄호가 나왔을 때 1) 스택이 비었을 경우 2) 스택의 top 에 있는 값이 매칭된느 열린 괄호가 아닐 경우 옳지 않은 괄호이므로 false를 리턴하도록 한다.

회전하는 것은 반복문을 이용해서, substring 해서 바꿔주도록 한다.