코딩테스트/Programmers

[JAVA] 괄호 회전하기

hxx_1 2024. 4. 30. 15:38

< 풀이 >

import java.util.Stack;

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

        for (int i = 0; i < s.length(); i++) {
            Stack<Character> stack = new Stack<>();
            String str = s.substring(i, s.length()) + s.substring(0, i);
            
            for (int j = 0; j < str.length(); j++) {
                char c = str.charAt(j);
                if (stack.isEmpty()) {
                    stack.push(c);
                } else if (c == ')' && stack.peek() == '(') {
                    stack.pop();
                } else if (c == '}' && stack.peek() == '{') {
                    stack.pop();
                } else if (c == ']' && stack.peek() == '[') {
                    stack.pop();
                } else {
                    stack.push(c);
                }
            }
            if (stack.isEmpty()) {
                answer++;
            }
        }

        return answer;
    }
}

 

✏️ 풀이 방법

 

1. 반복문을 돌며 스택 생성, 문자열 자르기 ( i의 값 => 회전 횟수 )  

문자열 상태

 

2. 회전한 문자열이 올바른 괄호 문자열인지 확인하기 위한 반복문 실행 

    : 현재 값과 스택의 가장 위에 있는 값이 짝이 맞으면 pop ( )

    : 스택이 비어있으면, 혹은 짝이 맞지 않으면 push ( ) 

: 반복문을 다 돌았을 때 스택이 비어있으면  올바른 괄호 ! 

 

✍🏻 느낀점 

 

 이 문제도 풀면서 너무 뻘짓을 많이 했다 ㅠㅠ 처음에 큐로 풀려고,, 했다가 내 풀이로 너무 복잡해지고, 어려워서 다른 사람들의 풀이를 보고 문제를 해결했다. 정말 오늘은 내 힘으로 푼 문제가 없는 느낌? 이런 유형의 문제는 보통 스택을 많이 사용하는 것 같다. 이 방법을 잘 기억해두고, 다음에는 뻘짓 하는 시간이 줄어들길 바란다^.^