[백준 4949] 균형잡힌 세상

2023. 2. 18. 01:31자료구조 및 알고리즘/백준

728x90

못 푼 문제

다른 사람 풀이 참고

//백준4949 균형잡힌 세상
 
#include <iostream>
#include <string>
#include <stack>
using namespace std;
 
int main() {
    while (true) {
        string input;
        getline(cin, input);
 
        if (input == ".") {
            break;
        }
 
        stack<char> s;
        bool flag = 0;
        for (int i = 0; i < input.length(); i++) {
            char c = input[i];
                
            if ((c == '(') || (c == '[')) {
                s.push(c);
            }
            else if (c == ')') {
                if (!s.empty() && s.top() == '(') {
                    s.pop();
                }
                else {
                    flag = 1;
                    break;
                }
            }
            else if (c == ']') {
                if (!s.empty() && s.top() == '[') {
                    s.pop();
                }
                else {
                    flag = 1;
                    break;
                }
            }
        }
 
        if (flag==0 && s.empty()) {
            cout << "yes" << endl;
        }
        else {
            cout << "no" << endl;
        }
 
    }
 
}

 

문자로 이뤄진 문자배열 문자열이라는 점을 이용한다!

문자열, 문자 비교 스킬

 

flag를 왜 써야할까-이거는 나도 좀 생각했는데 좀 더 구체화 해보자!

flag 쓰는 방법도 익히고!

flag 필요한 이유
닫는 괄호를 만났을 때 스택이 empty이거나 짝이 맞는 괄호가 top이 아닌 경우 yes일 수 없다.
바로 break 해주어야 함.
(안해주면 틀림)

 

내 풀이 스케치

+)짝이 맞으면 비게 되어 있다.

 

참고 문제 9012번 괄호

 

출처)

https://scarlettb.tistory.com/73

728x90