본문 바로가기

프로그래머스(Java)/Level 2

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

728x90

코드 힌트

  1. 문자열 회전: 문자열을 회전시켜 모든 가능한 상태를 검사해야 합니다.
    저는 이를 위해 substring 메서드를 사용했습니다. StringBuilder등 다양한 방법으로 회전시켜도 상관 없습니다
  2. 스택을 이용한 괄호 매칭: 스택을 이용해 괄호의 짝을 맞춥니다. 열린 괄호가 스택에 쌓이고, 닫힌 괄호가 들어올 때 스택의 꼭대기와 짝이 맞으면 스택에서 제거합니다.
  3. 올바른 괄호 문자열 판별: 모든 문자를 검사한 후 스택이 비어있다면, 해당 문자열은 올바른 괄호 문자열입니다.

 

 


정답은 더보기 클릭

더보기
더보기
import java.util.Stack;

class Solution {
    public int solution(String s) {
        int result = 0;
        
        // 문자열의 크기 == 회전 횟수
        for (int i = 0; i < s.length(); i++) {
            // i를 기준으로 substring 하기
            String rotatedStr = s.substring(i) + s.substring(0,i);
            Stack<Character> stack = new Stack<>();
            
            // 문자 한개씩 가져오기
            for (char c : rotatedStr.toCharArray()) {
                
                // stack이 비어있으면 추가하고 continue
                if (stack.isEmpty()) {
                    stack.push(c);
                    continue;
                }
                
                // ) } ] 값이 들어왔을 때 stack 제일 위에있는 요소가 매칭이 되면 삭제하기
                if (c == ')' && stack.peek() == '(') {
                    stack.pop();
                    continue;
                } else if (c == '}' && stack.peek() == '{') {
                    stack.pop();
                    continue;
                } else if (c == ']' && stack.peek() == '[') {
                    stack.pop();
                    continue;
                }
                
                // 매칭이 되지 않거나 { [ ( 가 들어오면 stack에 넣기
                stack.push(c);
            }
            
            // 전부 돌았을 때 stack의 크기가 0(모두 매칭되어 삭제됐을 때)일 때 result + 1하기
            if (stack.size() == 0) {
                result += 1;
            }
        }
        
        return result;
    }
}
728x90