[백준 9012번] 괄호 (C++)

2022. 2. 9. 13:30·Algorithm
반응형

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

 

9012번: 괄호

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

www.acmicpc.net

 

이번 포스팅에서는 백준 9012번 문제를 학습합니다.

 

 

 

 

이번 문제도 스택 라이브러리를 이용해서 풀 수 있고, 직접 구현해서도 풀 수 있다.

 

1. 직접 구현

#include <iostream>
#include <string>

using namespace std;


int main(){
    int T;
    cin>>T;
    string str;
    
    for(int i=0; i<T; i++){
        cin>>str;
        int k=0;
        for(int j=0; j< str.length(); j++){
            if(str[j]=='('){
                k++;            }
            else {
                k--;
            }
            if(k<0){
                break;
            }
            
        }
        if (k == 0){
            cout<<"YES"<<"\n";
           
        }
        else {
            cout<<"NO"<<"\n";
       
        }
    }
    return 0;
}

먼저 입력 데이터의 수T를 입력받는다.
그 다음 for문 안에서 str을 입력 받는다.

str 문자 하나 하나를 살펴 봐야하므로 str 문자 길이 만큼의 for문을 만든다.

이 for문 안에서 '(' 가 있다면 k의 값을 증가하고, 그렇지 않다면( ')' 또는 다른 문자) k의 의 값을 뺀다. 만약 k가 0보다 작으면 for 문을 나온 후 NO를 출력한다.

만약 k가 0보다 작지 않다면 str의 길이 만큼 for문을 돈 다음 '(' 와 ')' 의 개수가 같아 k값이 상쇄되어 0이 된다면 YES를 출력한다.

 

2. STL Stack 라이브러리 사용

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

using namespace std;
int main(){
    string str;
    int T;
    stack<char> st;
    
    cin>>T;
    for(int i=0;i<T;i++){
        int k=0;
        cin>>str;
        for(int j=0; j< str.length();j++){
            if(str[j]=='('){
                st.push(str[i]);
            }
            else{
                if(!st.empty()){
                    st.pop();
                }
                else{
                    k++;
                }
            }
        }
            if (k!=0){
                cout<<"NO"<<"\n";
            }
            else if(!st.empty()) {
                cout<<"NO"<<"\n";
            }
            else {
                cout<<"YES"<<"\n";
            }
        while(!st.empty()){
            st.pop();
        }
        
    }
}

우선 stack 라이브러리를 include 해준다.

그 다음 입력데이터 수T를 입력 받는다.

for문 안에서 k를 0으로 초기화 해준다. str을 입력 받는다.

( 입력 받은 문자의 길이만큼 반복하는 다음 for문에서 '('를 입력 받았다면 스택에 저장 후, ')'를 입력 받을 때 마다 스택에서 '('를 제거한다. 그러므로 stack인 st가 차있다면 k값이 양수이고, 비어 있다면 0이 될 것이다.)

따라서 k값이 0이 아니라면 NO 를 출력한다.

그리고, stack st가 차있다면 NO를 출력한다.

그렇지 않다면 YES를 출력한다.

이제 다음 string을 입력받기위해 주어진 stack 를 초기화 해준 후 for문을 반복 진행한다.

 

 

 

 

 

 

*유의사항

- 공부 중인 인공지능공학과 대학생이 정리해서 남긴 정리입니다.

- 정확하지 않거나, 틀린 점이 있다면 댓글로 알려주시면 감사하겠습니다.

 

 

반응형

'Algorithm' 카테고리의 다른 글

[백준 10845번] 큐 (C++)  (0) 2022.02.13
[알고리즘] 큐 (C++)  (0) 2022.02.13
[백준 1874번] 스택 수열 (C++)  (0) 2022.02.11
[백준 9093번] 단어 뒤집기 (C++)  (0) 2022.02.09
[백준 10828번] 스택 (C++)  (0) 2022.02.09
'Algorithm' 카테고리의 다른 글
  • [알고리즘] 큐 (C++)
  • [백준 1874번] 스택 수열 (C++)
  • [백준 9093번] 단어 뒤집기 (C++)
  • [백준 10828번] 스택 (C++)
성 언
성 언
AI 학과 3학년 학생이자 RAG 기반 LLM 챗봇 개발 회사에서 근무 중입니다. AI 챗봇 개발과 관련된 기술, 연구, 그리고 실험 과정에서 얻은 인사이트를 공유합니다. 최신 AI 기술을 함께 탐구하며 성장해 나가요!
    반응형
  • 성 언
    AI EON
    성 언
  • 전체
    오늘
    어제
    • AII
      • NLP
      • AI Paper Review
      • MLOps
      • Python
      • Algorithm
      • Memo
      • Server Developer
        • Node.js
        • DataBase&Data Engineering
        • Server Basic
      • MATH
        • Linear Algebra
        • AI
      • etc
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    배타 잠금
    비반복 읽기
    Signature 초격차 패키지
    umc
    word 자동화
    문서 자동화
    다중 버전 동시성 제어
    [Numpy] squeeze & unsqueeze
    Python
    팬텀 읽기
    node.js
    NVML
    map 함수
    배열의 모양 변경
    백준
    c++
    docx-template
    더티 읽기
    파이썬 문서 자동화
    transaction
    Ubuntu-20.04 APM 소스 설치
    트랜잭션
    reranker
    파이썬
    패스트캠퍼스 수강 후기
    스택
    더티 쓰기
    리랭커
    알고리즘
    그리디 알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
성 언
[백준 9012번] 괄호 (C++)
상단으로

티스토리툴바