풀이
자료구조
- 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
정말 좋은 글이다ㅎㅎ
'🧑💻코딩 테스트 > 백준 (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 |
댓글