본문 바로가기

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import java.util.*;

class Solution {
    public int solution(String s) {
        int answer = 0;
        StringBuffer sb = new StringBuffer(s);
        for(int i=0; i<s.length();i++) {
            if(check(sb)==true) answer++;
            sb.append(sb.charAt(0));
            sb.deleteCharAt(0);
        }
        return answer;
    }
    public boolean check(StringBuffer sb) {
        Stack<Character> stack = new Stack<Character>();
        if(sb.length()%2!=0) return false;
        for(int i =0; i<sb.length(); i++) {
            switch(sb.charAt(i)) {
                case ')': if (stack.empty()) return false; 
                    else if(stack.peek() == '(') {stack.pop(); break;}
                
                case '}': if (stack.empty()) return false;
                    else if(stack.peek() == '{') {stack.pop(); break;}
                          
                case ']':if (stack.empty()) return false;
                    else if(stack.peek() == '[') {stack.pop(); break;}
                         
                default :
                    stack.push(sb.charAt(i));
                    break;
            }
    }
        return stack.empty();
}
}

스택구조를 활용한 메소드 check()를 만들었다.

if (stack.empty()) return false; 를 추가하지 않으니까 첫 타자에 닫는 괄호가 나왔을때 stack.peek()할게 없어서 EmptyStackException이 나서 추가해줬다.

그 다음 메인메소드에서 s로 스트링버퍼 sb를 만들어서 check(sb)가 true이면 answer+1씩 하고, 

회전하는 것은 스트링버퍼의 append와 deleteCharAt으로 구현했다.

내머내공 : 내 머리로 내가 공부했습니다

틀린 내용은 언제든지 알려주세요!!