Deff_Dev
[백준] 9012번 괄호 (C++) 본문
문제
이 문제는 입력한 문자열에서 모든 괄호가 완성되면 "YES"를, 완성되지 못한다면 "NO"를 출력하는 문제이다.
스택의 top에 "("가 있고 푸시할 문자가 ")"일 때 pop을 하고, 그 이외의 경우에는 push한 뒤,
스택이 비어 있다면 "YES", 스택이 채워져 있다면 "NO"를 출력하는 방법으로 문제를 풀이했다.
풀이
#include <iostream>
#include<stack>
#include<string>
using namespace std;
int main() {
int num;
cin >> num;
while (num > 0) {
string vps;
cin >> vps;
stack<char> vpsStack;
for (int i = 0; i < vps.length(); i++) {
if (vpsStack.empty()) { // 문자열이 비어 있을때 괄호 Push
vpsStack.push(vps[i]);
}
else {
if (vpsStack.top() < vps[i]) { // '('은 ')'보다 작기 때문에 해당 조건문으로 () 짝 판별, 스택에 맞는 괄호가 나온다면 top에 있는 '('팝
vpsStack.pop();
}
else { // 짝이 맞지 않다면 Push
vpsStack.push(vps[i]);
}
}
}
if (vpsStack.empty()) { // 스택이 비어있다면 Yes
cout << "YES\n";
}
else {
cout << "NO\n"; // 스택에 뭔가가 남아있다면 No
}
num--;
}
return 0;
}
출력 결과를 Yes, No로 잘못 써서 몇시간 동안 고민하던 문제였다.
앞으로는 출력 문자를 제대로 확인해 문제를 풀어야겠다.
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] 2667번 단지 번호 붙이기 (0) | 2024.06.02 |
---|---|
[백준] 2178번 미로탐색 (C++) (0) | 2024.03.01 |
[백준] 11399번 ATM (C++) (0) | 2024.03.01 |
[백준] 1697번 숨바꼭질 (C++) (0) | 2024.03.01 |
[백준] 1260번 DFS와 BFS (C++) (0) | 2024.02.29 |