본문 바로가기

PS/BOJ

[C++] BOJ (백준) 4949 : 균형잡힌 세상

문제

4949번: 균형잡힌 세상 (acmicpc.net)

 

4949번: 균형잡힌 세상

각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에

www.acmicpc.net

코드
#include <iostream>
#include <stack>

using namespace std;

bool isBalanced(const string &s) {
  stack<char> st;
  for (char c: s) {
    switch (c) {
      case '(':
      case '[':
        st.emplace(c);
        break;
      case ')':
        if (!st.empty() && st.top() == '(') st.pop();
        else return false;
        break;
      case ']':
        if (!st.empty() && st.top() == '[') st.pop();
        else return false;
        break;
      default:
        break;
    }
  }
  return st.empty();
}

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);

  string s;
  getline(cin, s);
  while (s != ".") {
    cout << ((isBalanced(s)) ? "yes" : "no") << '\n';
    getline(cin, s);
  }
  return 0;
}

 

설명

여는 괄호를 만나면 스택에 넣고, 닫는 괄호를 만나면 여는 괄호가 스택의 top에 있는지 확인한다.