Deff_Dev

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

코딩테스트/백준

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

Deff_a 2024. 3. 1. 13:32
 

9012번: 괄호

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

www.acmicpc.net

문제

 

이 문제는 입력한 문자열에서 모든 괄호가 완성되면 "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