본문 바로가기

PS_Baekjoon

[백준 C++] 4949번 : 균형잡힌 세상

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

 

4949번: 균형잡힌 세상

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

www.acmicpc.net

풀이 :

- 문자열에 괄호가 존재할 경우, 괄호가 서로 매칭되는지 확인 

    -> 스텍을 이용해 풀 수 있다

     닫는 괄호가 나왔을 때 제일 위에 쌓여있는 괄호와 매칭되는지 확인

- 문자열 안에 공백이 존재하기 때문에 공백을 함께 입력받아야 한다

- 종료 조건은 '.'

 

코드 :

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;

int main(){
    cin.tie(NULL);
    ios::sync_with_stdio(false);

    string s;
    vector<char> v; //괄호를 저장할 벡터배열
    bool ans; //정답 판별할 ans

    while(1){ //일단 무한 반복
        ans = true; 
        getline(cin, s, '.'); //공백까지 한 줄로 입력 받을 getline. 종료 조건은 .
        if(s.size() == 0){ //.를 무시하고 입력 받기 때문에
            break; //입력을 종료하기 위해 .가 하나 들어오면 s의 사이즈는 0이다
        }
        cin.ignore(); //getline에 쌓이는 개행 제거
        for(int i=0; i<s.size(); i++){
            if((s[i] == '(') || (s[i] == '[')){ //여는 괄호는 무조건 벡터에 저장
                v.push_back(s[i]);
            }else if(s[i] == ')'){ 
                if((v.size() == 0) || (v.back() != '(')){ //벡터의 사이즈가 0인데 닫는 괄호가 나왔거나,
                    ans = false; //마지막 괄호와 매칭이 되지 않을 경우 false로 표시
                    break;
                }else if(v.back() == '('){ //매칭이 된다면 벡터 마지막 괄호 삭제
                    v.pop_back();
                }
            }else if(s[i] == ']'){
                if((v.size() == 0) || (v.back() != '[')){
                    ans = false;
                    break;
                }else if(v.back() == '['){
                    v.pop_back();
                }
            }
        }
        if(v.size() > 0){ //여는 괄호와 닫는 괄호의 수가 맞지 않는 경우
            ans = false;
        }
        (ans ? cout << "yes\n" : cout << "no\n");
        v.clear();
        s.clear(); 
    }
}

'PS_Baekjoon' 카테고리의 다른 글

[백준 C++] 1417번 : 국회의원 선거  (1) 2023.03.14
[백준 C++] 2581번 : 소수  (0) 2023.03.13
[백준 C++] 2563번 : 색종이  (0) 2023.03.11
[백준 C++] 1912번 : 연속합  (0) 2023.03.10
[백준 C++] 2628번 : 종이자르기  (1) 2023.03.09