코딩 테스트/프로그래머스

프로그래머스 - 괄호 회전하기 문제

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

 

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

 

programmers.co.kr

스택을 통해서 풀이를 진행하였습니다.

간단하게 설명하자면

문자가 (, {, [ 이면 stack에 추가 하고

아니면  앞서 stack 에 넣은 값이 반대방향의 괄호가 아니라면 return false;

맞으면 넣은 값을 pop함

 

마지막에 stack이 비어야 return true

이유는 (, {, [ 가 더 많이 존재하면 stack에 값이 남아 있게 되기 때문에

쌍이 딱 맞다면 스택의 길이는 0이 된다.

import java.util.*;
class Solution {
    public int solution(String s) {
        int answer = 0;
        StringBuilder temp = new StringBuilder(s);
        for(int i = 0; i < s.length(); i++) {
            if(isCorrectStr(temp.toString())) {
                answer += 1;
            }
            temp.append(temp.charAt(0)).deleteCharAt(0);
        }
        return answer;
    }


    static boolean isCorrectStr(String str) {
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < str.length(); i++) {
            char now = str.charAt(i);
            if(now == '(' || now == '{' || now == '[') {
                stack.add(now);
            }else if(!stack.isEmpty()) {
                if(now == ')' && stack.peek() == '(') {
                    stack.pop();
                }
                else if(now == '}' && stack.peek() == '{') {
                    stack.pop();
                }
                else if(now == ']' && stack.peek() == '[') {
                    stack.pop();
                }
            }else {
                return false;
            }
        }
        
        if(stack.isEmpty()) {
            return true;
        }
        
        return false;
    }
}