컴굥일지

[BOJ/백준 4949][C++] 균형잡힌 세상 본문

알고리즘/코테 문제

[BOJ/백준 4949][C++] 균형잡힌 세상

gyong 2022. 4. 16. 02:24
반응형

문제

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

백준 4949
백준 4949

 

문제 내용

문장을 입력받아서 문장 안에 있는 괄호를 순서대로 체크하여 균형 잡혀있는지 아닌지를 판단하는 문제이다.

. 하나만 들어왔을 때, 프로그램이 종료되게 해야 한다.

 

문제 풀이

[백준 9012 괄호] 문제에서 조금 발전된 형태라고 생각하면 된다.

다만, 문장 안에서 ( ) [ ] 이 네 가지 괄호만 체크해야 하고, 입력되는 문자열에 공백이 포함된다는 것에 유의하자.

 

입력 문자열에 공백이 포함되었기 때문에 getline을 이용해서 한 줄을 입력받으면 된다.

또한, checkVPS함수를 약간 수정해주면 된다. 

( [ 이 두 가지 종류의 괄호는 스택에 그대로 추가해주면 된다.

하지만, ) ]  이 닫는 괄호들은 스택의 top에 자신과 매칭 되는 여는 괄호가 있을 때만 올바른 경우이다.

 

코드

#include <iostream>
#include <stack>
#include <string>
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] == '[') {
			s.push('[');
		}
		else if (tmp[i] == ')') {
			if (s.empty()) return false;
			else if (s.top() != '(') return false;
			else s.pop();
		}
		else if (tmp[i] == ']') {
			if (s.empty()) return false;
			else if (s.top() != '[') 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);

	string tmp;
	while (true) {
		getline(cin,tmp);
		if (tmp == ".") break;

		string result = checkVPS(tmp) ? "yes" : "no";
		cout << result << '\n';
	}
}
반응형
Comments