본문 바로가기
Baekjoon/[Code.plus] 알고리즘 기초 1/2

[BOJ/백준] 9012 괄호

by 해적거북 2021. 7. 26.
728x90

● [문제번호 9012] 괄호

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

 

9012번: 괄호

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

www.acmicpc.net

 

● 알아야 할 것

: stack 자료구조와 메소드

: 문자열 순회를 위한 iterator

 

● 풀이 과정

: '(' 을 만나면 stack에 저장

: ')' 을 만나면 stack에서 '('을 꺼내서 올바른 괄호 문자열(VPS)인지 확인

 

● 주의 할 것

: 숫자 입력 -> 공백있는 문자열 입력 시 버퍼 비우기

: stack 전역변수 => 새 test마다 stack을 비워야 함

: stack 지역변수 => 새 test마다 stack을 비우지 않아도 됨

 

● 참고 할 것

: NULL

 

● 풀이 코드

#include <bits/stdc++.h>

using namespace std;

// stack<char> s; 지역변수
string::iterator it;
string str;
int T, flag;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    // 숫자 입력 -> 버퍼 비우기
    cin >> T >> ws;
    
    while(T--)
    {
        // 매번 새로운 stack을 사용하니 지역변수로 선언
        // 전역변수로 사용하는 경우 while문 마지막에 스택을 비우는 작업 필요
        stack<char> s;
        
        getline(cin, str);
        
        // 문자열 중간에 NO 결과를 얻은 경우에 활용
        flag = 0;
        
        for(it = str.begin(); it < str.end(); it++)
        {
            // '(' 하나씩 stack에 쌓기
            if(*it == '(')
                s.push(*it);
            
            // ')'인 경우 '('를 하나씩 뽑기
            else if(*it == ')')
            {
                // 뽑아야 하는데 stack이 비어있는 경우 => NO
                if(s.empty())
                {
                    cout << "NO\n";
                    flag = 1;
                    break;
                }
                // 정상적으로 뽑는 경우
                else
                    s.pop();
            }
        }
        
        // 중간에 결과를 알아낸 경우
        if(flag == 1)
            continue;
        
        // 모두 뽑혀 stack이 비어있어야 VPS
        if(s.empty())
            cout << "YES\n";
        // VPS가 아닌 경우
        else
            cout << "NO\n";
    }

    return 0;
}

 

 

● [백준] - [알고리즘 기초 1/2] - [200 - 자료구조 1] 문제집

번호 문제 번호 문제 이름 풀이 링크
1 10828 스택 https://pirateturtle.tistory.com/153
2 9093 단어 뒤집기 https://pirateturtle.tistory.com/154
3 9012 괄호 https://pirateturtle.tistory.com/155
4 1874 스택 수열 https://pirateturtle.tistory.com/156
5 1406 에디터 https://pirateturtle.tistory.com/158
6 10845 https://pirateturtle.tistory.com/161
7 1158 요세푸스 문제 https://pirateturtle.tistory.com/162
8 10866 https://pirateturtle.tistory.com/164

 

728x90

'Baekjoon > [Code.plus] 알고리즘 기초 1/2' 카테고리의 다른 글

[BOJ/백준] 10866 덱  (0) 2021.07.26
[BOJ/백준] 1158 요세푸스 문제  (0) 2021.07.26
[BOJ/백준] 10845 큐  (0) 2021.07.26
[BOJ/백준] 1406 에디터  (0) 2021.07.26
[BOJ/백준] 1874 스택 수열  (0) 2021.07.26
[BOJ/백준] 9093 단어뒤집기  (0) 2021.07.26
[BOJ/백준] 10828 스택  (0) 2021.07.26

댓글