Post

[월간 코드 챌린지 시즌2] 괄호 회전하기

[월간 코드 챌린지 시즌2] 괄호 회전하기

🙋‍♂️ 들어가며

이번 문제는 각 idx별로 N길이만큼 보는 stack 응용 문제다

해당 코드는 stack 구현으로 작성되어 라이브러리 X

먼저 생각해볼 조건은 다음과 같다.

1
2
3
4
5
6
7
1. 여는 괄호일  -> 무조건 추가

2. 닫는 괄호일 
  2-1. 스택이 빈칸이라면 불가능 -> 반례 )(, ][, }{, ]( 등등
  2-2. 짝을 지어서 (), {}, []  것만 제거하고 나머지는 불가능으로 간주.
  
3. 최종 검사 -> 스택이 빈칸 && flag == true 일때 cnt++



✅ 코드

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
class Solution {
    public int solution(String s) {
        int answer = 0;
        int N = s.length();
        
        
        // 1. 각 회전마다 stack 내부의 괄호를 제거할 수 있나 확인
        for (int i = 0; i < N; i++) {
            boolean flag = true;
            char[] stack = new char[N];
            int top = -1;
            
            // 2. 회전
            for (int j = 0; j < N; j++) {
                // 2-1. 회전하는 idx
                int idx = (i+j) % N;
                char ch = s.charAt(idx);
                
                // 여는 괄호면 stack에 추가
                if (ch == '(' || ch == '{' || ch == '[') {
                    stack[++top] = ch;
                }
                // 닫는 괄호일때
                else if (ch == ')' || ch == '}' || ch == ']') {
                    // 스택이 현재 빈칸이라면 볼필요도 없다
                    if (top == -1) {
                        flag = false;
                        break;
                    }
                    // 매칭되면 stack 칸 줄이자
                    char peek = stack[top];
                    if (peek == '(' && ch == ')') {
                        top--;
                    }
                    else if (peek == '{' && ch == '}') {
                        top--;
                    }
                    else if (peek == '[' && ch == ']') {
                        top--;
                    }
                    else {
                        flag = false;
                        break;
                    }
                }
            }
            // 스택이 빈칸이고 true일때 answer++
            if (top == -1 && flag) answer++;
        }
        
        return answer;
    }
}
This post is licensed under CC BY 4.0 by the author.

Trending Tags

도움이 필요하면
나를 눌러 구리🐻
챗봇
너굴
bot
어서와 구리 ʕ ·ᴥ·ʔ
무엇이 필요하셔 구리?

Trending Tags

도움이 필요하면
나를 눌러 구리🐻
챗봇
너굴
bot
어서와 구리 ʕ ·ᴥ·ʔ
무엇이 필요하셔 구리?