
풀이
자료구조
- char stack[] : 스택으로 사용할 배열
- int top : top으로 쓸 변수
- int count : 테스트케이스 수
- string str : 입력받은 문자열
- int length : 문자열 길이
알고리즘
- 스택
코드
- C++은 string이라는 문자열을 처리하기에 유리한 변수가 있기 때문에 사용
- getline() 함수를 사용하면 문장을 개행문자(\n) 전까지 한 번에 입력받을 수 있음
- cin.ignore() 함수를 사용해서 입력버퍼 제거가 가능
코드
#include <iostream>
#include <string>
using namespace std;
char stack[50];  //스택으로 사용할 배열
int top = -1;  //top 선언 및 초기화
int isEmpty() {  //배열이 비어있는지 확인
    if(top < 0) {
        return 1;
    }
    else
        return 0;
}
void push(char input) {  //push 함수
    stack[++top] = input;
}
int pop() {  //pop 함수
    if(isEmpty()){
        return 1;
    }
    else {
        stack[top--] = 0;
    }
    return 0;
}
void reset() {  //스택 초기화
    for(int i = 0; i < 50; i++) {
        stack[50] = 0;
    }
    top = -1;
}
int main() {
    int result = 0;
    int num = 0;
    int count = 0;
    int length = 0;
    string str;
    cin >> num;
    cin.ignore();  //입력 버퍼 제거
    while(count < num) {
        getline(cin, str);  //문자열 입력
        length = str.length();
        for (int i = 0; i < length; i++) {  //문자열 길이만큼 반복
            if (str[i] == '(') {  //여는 괄호는 push
                push(str[i]);
            }
            else if (str[i] == ')') {  //닫는 괄호는 pop
                if(pop()){
                    result = 1;  //입력이 비어있을 때 pop을 시도하면 result를 1로 변경
                }
            }
        }
        if (isEmpty() && result == 0) {  //VPS면
            cout << "YES" << "\n";
            count++;
        }
        else {
            cout << "NO" << "\n";
            reset();
            result = 0;
            count++;
        }
    }
    return 0;
}
총평
스택을 사용하는 대표적인 문제다.
스택에 대한 함수들만 제대로 짤 수 있다면 쉽게 풀 수 있는 문제였다.
스택에 대해 잘 모르겠다면 https://cocoiscat.tistory.com/32
[자료구조/C++] 스택(Stack)
스택이란? 인터넷을 돌아다니다 보면 "업보 스택 쌓는다"라는 말을 들을 수 있을 것이다. 무언가 잘못을 해서 업보를 차곡차곡 쌓는다는 뜻인데, 나중에 이를 그대로 돌려받을 때 "업보 청산" 한
cocoiscat.tistory.com
정말 좋은 글이다ㅎㅎ
'🧑💻코딩 테스트 > 백준 (BOJ)' 카테고리의 다른 글
| [백준 알고리즘/ C++] BOJ.2869 : 달팽이는 올라가고 싶다 (0) | 2022.02.01 | 
|---|---|
| [코딩테스트/ 백준 알고리즘] 18111번 : 마인크래프트 (C++ 풀이) (0) | 2022.01.31 | 
| [백준 알고리즘/ C++] BOJ.2292 : 벌집 (0) | 2022.01.31 | 
| [코딩테스트/ 백준 알고리즘] BOJ.2798 : 블랙잭 (C++ 풀이) (0) | 2022.01.30 | 
| [백준 알고리즘/ C++] BOJ.10828 스택 (0) | 2022.01.30 | 
 
										
									 
										
									 
										
									 
										
									
댓글