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

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

34suuuuu 2025. 4. 7. 09:45

✴️ 문제

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

✴️ 문제 풀이 

문자열을 회전한다는게 무슨 의미인지만 이해하면 풀이는 어렵지 않았다.

 

 

회전시킨 문자열마다 올바른 괄호 문자열인지를 확인해주면 된다.

만약 올바른 괄호 문자열이라면 `answer + 1`을 해주면 된다.

아래의 코드에서는 `chkRotation`을 통해서 이를 확인해줬다.

 

Stack을 이용해서 열리는 괄호 `(`, `{`, `[`라면 추가해주고

닫히는 괄호의 경우 `stack.pop()`과 짝이 맞다면 `continue`지만,

짝이 맞지 않다면 `false`를 리턴해서 올바르지 않은 괄호 문자열임을 나타냈다.

최종적으로 stack이 비어있다면 모두 pop된 상황이어서 올바른 괄호 문자열이다. 

 

✴️ 전체 코드(Java)

import java.util.*;

class Solution {
    public int solution(String s) {
        int answer = 0;
        
    for(int i=0; i<s.length(); i++){
        answer += chkRotation(s) ? 1 : 0;
        s = s.substring(1, s.length()) + s.substring(0, 1);
    }
        return answer;
    }
    
    public boolean chkRotation(String str){
        Stack<Character> stack = new Stack<>();
        
        for(int i=0; i<str.length(); i++){
            char cur = str.charAt(i);
            if(cur == '(' || cur == '{' || cur == '['){
                stack.push(cur);
            }else{
                if(!stack.isEmpty()){
                    char top = stack.pop();
                    if(top == '(' && cur == ')') continue;
                    else if(top == '{' && cur == '}') continue;
                    else if(top == '[' && cur == ']') continue;
                    else return false;
                }else return false;
            }
        }
        if(!stack.isEmpty()) return false;
        return true;
    }
}