컴굥일지

[BOJ/백준 9012][C++] 괄호 본문

알고리즘/코테 문제

[BOJ/백준 9012][C++] 괄호

gyong 2022. 1. 27. 22:25
반응형

문제

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

 

문제 내용

테스트 케이스별로 괄호 문자열을 입력받아 VPS인지 아닌지를 확인하는 문제이다.

 

문제 풀이

괄호 문자열을 입력받아서, 문자열의 앞부터 한 글자씩 읽으며 스택에 추가하거나 빼면 된다.

읽은 글자가 '(' 라면, 스택에 push( '(' ) 한다.

읽은 글자가 ')' 라면, 스택에서 하나를 pop() 하면 된다.
이때 만약 스택이 비어있다면, 문자열은 절대 VPS가 될 수 없으므로 바로 false를 return 한다.

문자열을 전부 읽은 후에 스택이 비어있으면 괄호의 쌍이 제대로 맞는다는 것을 의미하므로 true를 return 한다.
스택이 비어있지 않다면 false를 return 한다.

 

코드

#include <iostream>
#include <stack>
using namespace std;

bool checkVPS(string tmp) {
	stack<char>s;

	for (int i = 0; i < tmp.size(); i++) {
		if (tmp[i] == '(') {
			s.push('(');
		}
		else if(tmp[i]==')') {
			if (s.empty()) return false;
			else s.pop();
		}
	}
	if (s.empty()) return true;
	else return false;
}

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	//입력
	int testcase;
	cin >> testcase;

	//문제 해결
	for (int i = 0; i < testcase; i++) {
		string tmp;
		cin >> tmp;
        
        //결과 출력
		string result = checkVPS(tmp) ? "YES" : "NO";
        	cout << result << '\n';		
	}
}

 

문제 코드 설명

1) checkVPS(string tmp) 함수

매개변수로 넘어온 문자열이 VPS인지 아닌지를 판단하여 bool값을 반환해주는 함수이다.
위에서 설명한 대로 stack을 사용하여 판단 과정을 거치면 된다.

 

2) 결과 출력

checkVPS(tmp)의 값이 true면 "YES"를, false면 "NO"를 출력하면 된다. 
이 부분에서 조건문을 삼항 연산자로 작성했다.

반응형
Comments