Algorithm/JAVA - BOJ

BOJ/백준 - 4949 균형잡힌 세상 JAVA

ㅇㅇ잉 2021. 9. 30. 01:42

https://www.acmicpc.net/problem/4949

 

4949번: 균형잡힌 세상

하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마

www.acmicpc.net

 

 

괄호 문제랑 비슷하다.

여는 괄호면 스택에 넣어주고, 닫는 괄호면 빼주면 된다.

근데 이제 어떤 괄호냐도 체크해줘야함

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
54
55
56
57
58
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
 
 
        while (true) {
            Stack<Character> stack = new Stack<>();
            String str = br.readLine();
            boolean check=true;
 
            if(str.equals(".")) break;
 
            for (int i = 0; i < str.length(); i++) {
                char c = str.charAt(i);
 
                //여는 괄호면
                if (c == '[' || c == '(') {
                    //push
                    stack.push(c);
                }
                //닫는 괄호면
                else if (c == ']' || c == ')') {
                    //stack 비어있으면
                    if (stack.isEmpty()) {
                        check=false;
                        break;
                    } else {
                        char tmp = stack.pop();
                        //닫는 괄호가 stack에 있는 괄호랑 같지 않으면
                        if ((tmp == '[' && c == ']'|| (tmp == '(' && c == ')')) {
                            continue;
                        }
                        else{
                            check=false;
                            break;
                        }
                    }
                }
            }
            if (check && stack.isEmpty()) {
                sb.append("yes\n");
            }
            else {
                sb.append("no\n");
            }
 
        }
 
        System.out.print(sb);
    }
}
cs