www.acmicpc.net/problem/4949

 

4949번: 균형잡힌 세상

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

www.acmicpc.net

<풀이>

1. 문자열을 입력받는다.

2. 문자열이 균형잡혀 있는지 판단 후, 출력한다.

 

<해법>

1. 문자열이 균형잡혀 있는지 판단하는 방법

=> 대표적인 후입선출 자료구조 스택의 활용인 '괄호검사' 문제 입니다. 

 

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
59
60
61
62
63
64
65
66
#include <iostream>
#include <string>
#include <stack>
 
using namespace std;
 
bool isBalanced(string s) {
    //스택 자료구조 사용
    stack<char> st;
 
    //괄호 검사
    for (int i = 0; i < s.length(); i++) {
        if (s[i] == '(' || s[i] == '[') {
            st.push(s[i]);
        }
        else if (s[i] == ')') {
            if (st.empty() || st.top() != '(') {
                return false;
            }
            else {
                st.pop();
            }
        }
        else if (s[i] == ']') {
            if (st.empty() || st.top() != '[') {
                return false;
            }
            else {
                st.pop();
            }
        }
    }
 
    if (!st.empty()) {
        return false;
    }
 
    return true;
}
 
int main() {
 
    string s = "";
 
    while (true) {
        
        //입력
        getline(cin, s);
 
        //종료 조건
        if (s == ".") {
            break;
        }
 
        //균형잡힌 문자열인지 판단 후 출력
        if (isBalanced(s)) {
            cout << "yes" << "\n";
        }
        else {
            cout << "no" << "\n";
        }
    }
 
    //종료
    return 0;
}
 

 

스택의 활용인 '괄호 검사'에 대해 알아볼 수 있는 문제였습니다.

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[C++] 백준 14502 - 연구소  (0) 2021.01.03
[C++] 백준 1120 - 문자열  (0) 2021.01.03
[C++] 백준 10773 - 제로  (0) 2021.01.01
[C++] 백준 1764 - 듣보잡  (0) 2021.01.01
[C++] 백준 2636 - 치즈  (0) 2020.12.28

+ Recent posts