티스토리 뷰

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 해서 바꿔주도록 한다. 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함