티스토리 뷰

반응형

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

 

4949번: 균형잡힌 세상

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

www.acmicpc.net


⊙ 문제

⊙ 입력

⊙ 출력

⊙ 예제 입출력

⊙ 알고리즘 분류

  • 자료 구조
  • 문자열
  • 스택

 


 

⊙ 문제 접근 과정

 

이번 코드는 주석이 딱히 필요 없을 것 같아서 넣지 않았다.

 

여는 괄호가 들어오면 종류별로 구분해서 스택에 push 해준다.

닫는 괄호가 들어오면 먼저 스택에 값이 있는지 확인하고 없다면 no를 출력

값이 있다면 스택 제일 맨 위에 있는 괄호의 종류와 같은지 판별한다.

 

만약 종류가 같다면 pop, 다르다면 no를 출력해준다.


 

⊙ 문제 풀이

 

#include <iostream>
#include <string>
#include <stack>

using namespace std;

int main() {
    while(true) {
        stack<int> st;
        string s;
        bool flag=false;
        
        getline(cin, s);
        if(s.size()==1 && s[0]=='.') break;

        for(int i=0;i<s.size();i++) {
            if(s[i]=='[') st.push(1);
            if(s[i]=='(') st.push(2);
            if(s[i]==']' || s[i]==')') {
                if(st.empty()) {
                    flag=true;
                } else if(s[i]==']') {
                    if(st.top()==1) st.pop();
                    else flag=true;
                } else if(s[i]==')') {
                    if(st.top()==2) st.pop();
                    else flag=true;
                }
            }
        }
        if(!flag && st.empty()) cout << "yes\n";
        else cout << "no\n";
    }
}

 


⊙ 결과

 


⊙ 마무리

 

 

NONE

 

좋아요 로그인하지 않아도 누를 수 있습니다!

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함