백준 4949 균형잡힌 세상/ C++

이유참치·2025년 12월 15일

백준

목록 보기
103/248

문제 : 링크텍스트

풀이 point

자료구조 스택을 활용하는 문제
열린괄호를 만났을 때는 스택에 push
닫힌괄호를 만났을 때는 스택 맨 위 값이 닫힌괄호의 유형과 같은 열린괄호라면
짝이 제대로 맞다는 것을 확인 가능
그렇지 않다면 짝이 맞지 않음

풀이 순서

  1. 문자열 입력 받기
  2. 열린괄호일 때는 스택에 push
  3. 닫힌괄호일 때는 스택 맨 위 값이 무엇인지 파악하여야 함. 이때, 스택이 비어있으면 짝이 맞지 않다는 것이므로 스택이 비어있는지도 파악하여야 함.
  4. 마지막까지 진행 후 스택이 비어있다면 짝이 맞는 괄호, 그렇지 않다면 짝이 맞지 않는 괄호

코드

#include <iostream>
#include <vector>
#include <queue>
#include <string>
#include <stack>

//백준 4949, 균형잡힌 세상
int main(){
    while(true){
        
        std::string s;
        std::getline(std::cin, s);

        if(s == ".") break;

        std::stack<char> strings;
        bool flag = true;

        for(auto c : s){
            if(c == '[' || c == '(') strings.push(c);
            else if(c == ']'){
                if(strings.empty() || strings.top() != '['){
                    flag = false;
                    break;
                } 
                strings.pop();
            }

            else if(c == ')'){
                if(strings.empty() || strings.top() != '('){
                    flag = false;
                    break;
                }
                strings.pop();
            }
        }
        if(!strings.empty()) flag = false;
        if(flag) std::cout << "yes\n";
        else std::cout << "no\n";

    }
    return 0;
}
profile
임아리 - 대학생

0개의 댓글