백준 C++ 9012 괄호

jaranda·2021년 12월 15일
0

9012번 괄호


문제풀이

#include <iostream>
#include <stack>
using namespace std;
void fast_io(void)
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
}

int main(void)
{
    fast_io();
    int k;
    cin >> k;
    cin.ignore();
    for (int i = 0; i < k; i++)
    {
        string str;
        getline(cin, str);
        stack<char> st;
        int ck = 0;
        for (int i = 0; i < str.length(); i++)
        {
            if (str[i] == 40 || str[i] == 91)
            {
                st.push(str[i]);
            }
            else if (str[i] == 41)
            {
                if (!st.empty() && st.top() == 40)
                {
                    st.pop();
                }
                else
                {
                    ck = 1;
                }
            }
            else if (str[i] == 93)
            {
                if (!st.empty() && st.top() == 91)
                {
                    st.pop();
                }
                else
                {
                    ck = 1;
                }
            }
        }

        if (st.empty() && ck == 0)
        {
            printf("YES\n");
        }
        else
        {
            printf("NO\n");
        }
    }
}

cin 으로 입력을 받았을때 자동으로 yes 가 나와버려서 난감했다. cin 이후에 버퍼를 비워주는 함수 cin.ignore()를 사용함으로서 해결했다.

cin은 입력값의 기준을 띄어쓰기 , 엔터, 탭등으로 나누는데 반해 getline 은 엔터를 잡는다.

getline과 cin을 같이 사용할경우에는 cin 이 버퍼에 남긴 엔터를 getline 이 읽었기 때문에 문제였다.

참고 링크

https://jhnyang.tistory.com/107

profile
자라는 개발자

0개의 댓글