Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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 31
Tags
more
Archives
Today
Total
관리 메뉴

코딩응급실

프로그래머스: 괄호 회전하기 본문

Java

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

Daeryuk Kim 2024. 3. 6. 00:55
import java.util.*;

class Solution {
    public int solution(String s) {
        int answer = 0;

        for(int i = 0; i < s.length(); i++) {
            String rotated = s.substring(i) + s.substring(0, i);
            if(isValid(rotated)) {
                answer++;
            }
        }

        return answer;
    }

    private boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();

        for(char c : s.toCharArray()) {
            if(c == '(' || c == '[' || c == '{') {
                stack.push(c);
            } else {
                if(stack.isEmpty()) {
                    return false;
                }
                if(c == ')' && stack.peek() != '(') {
                    return false;
                }
                if(c == ']' && stack.peek() != '[') {
                    return false;
                }
                if(c == '}' && stack.peek() != '{') {
                    return false;
                }
                stack.pop();
            }
        }

        return stack.isEmpty();
    }
    public static void main(String[] args) {
        String s = "[](){}";
        Solution sol = new Solution();
        int result = sol.solution(s);
        System.out.println(result); 
    }
}
0 "[](){}" O
1 "](){}[" X
2 "(){}[]" O
3 "){}[](" X
4 "{}[]()" O
5 "}[](){" X

[](){} + " " -> Yes
](){} + [    -> No
(){} + []   -> Yes
){} + [](   -> No
{} + []()   -> Yes 
} + [](){   -> No
총 3개만 유효하다.

역시 이런 문제는 Stack 느낌이 팍 난다.

예를 들어, 현재 문자가 ')'인데 스택의 가장 위에 '('가 없다면, 즉 스택에 '['나 '{'가 있다면 이는 올바른 괄호 문자열이 될 수 없다. 이 경우에는 false를 반환하게 된다.