Machineboy空

9012 : 괄호 - stack, 그리디 알고리즘, getline(cin,s) 본문

Computer/Coding Test

9012 : 괄호 - stack, 그리디 알고리즘, getline(cin,s)

안녕도라 2024. 2. 16. 15:11

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

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net


문제요약

괄호 쌍이 모두 충족되는지

 

난이도

Silver 4


풀이 포인트

  • stack 자료 구조
  • getline(cin, t)
    • cin : 공백(' ')이나 개행 문자(\n)를 만날 때까지 입력
    • getline : 공백(' ')이나 개행 문자(\n)를 만날 때까지 한 줄 전체 입력.
//내가 했던 실수
3
((
))
())(()

int n; string s;
cin >> n;		// 3입력

for(int i = 0; i <n; i++)
{
	getline(cin,s);//첫째 줄 3 뒤에 남은 공백 혹은 개행 문자를 한줄로 읽게 됌
}

https://machineboy0.tistory.com/149

 

3986 : 좋은 단어 - 스택

https://www.acmicpc.net/problem/3986 3986번: 좋은 단어 이번 계절학기에 심리학 개론을 수강 중인 평석이는 오늘 자정까지 보고서를 제출해야 한다. 보고서 작성이 너무 지루했던 평석이는 노트북에 엎드

machineboy0.tistory.com

스택 자료 구조를 이용한 쌍 Pop의 아이디어는 이 문제가 기본


REVIEW

 

늘상 입력 받는 게 가장 어렵다 참.

cin과 getline을 혼용해 받았더니 s에 축적이 안되더라.

근데 cin.ignore을 앞줄에 실행하고 받았더니 정상 작동. 입출력 하루 날잡고 정리해봐야겠다.

 

이제 스택 구조 이용한 pop 아이디어는 완벽히 숙지한듯 함!


CODE

#include <bits/stdc++.h>
using namespace std;

int n;
string s;
stack<char> vps;

int main()
{
    cin >> n;
    cin.ignore(); // 개행 문자를 처리하기 위해 추가
    // 입력이 젤 어려움

    for (int i = 0; i < n; i++)
    {
        getline(cin, s);

        //cout <<"s는 " << s <<'\n';

        for (int j = 0; j < s.length(); j++)
        {
            if (s[j] == '(')
            {
                //cout << "( 쌓임\n";
                vps.push(s[j]);
            }
            else if (!vps.empty() && vps.top() == '(')
            {
                vps.pop();
                //cout << "() 완성이라 pop\n";
            }
            else
            {
                //cout << ") 쌓임\n";
                vps.push(s[j]);
            }
        }

        if(vps.empty())cout <<"YES\n";
        else cout << "NO\n";

        while(!vps.empty()){
            vps.pop();
        }
    }


}