균형잡힌 세상(4949)

NJW·2021년 8월 28일
0

코테

목록 보기
94/170

들어가는 말

괄호 문제에서 대괄호가 포함된 거다. 하지만, 젠장... 진짜 하... 소문자 출력을 대문자로 해놓고 거의 1시간 동안 엉뚱한 곳에서 허우적댄 나를 생각하면...

코드 설명

괄호 문제에서 잠시 머뭇거렸던 부분이 있다. 벡터가 비어 있으면 괄호가 정상인 것을 의미하는데, ')'가 마지막에 있다면 정상인 괄호가 아님에도 불구하고 벡터가 비어있어 'YES'를 출력하는 것. 그래서 나는 위의 경우에는 ')'을 벡터에 넣어 'NO'를 출력하도록 했다.
그러나, 이보다 더 쉬은 방법이 있었으니 바로 bool을 이용하는 것이다. 그래서 만일 벡터가 비었는데 ')'이 들어오면 bool x를 1로 바꿔준다. 그리고 yes와 no를 출력할 때, yes는 x가 0인 경우에만 출력하라 하면 쉽게 답을 구할 수 있다.
출력이 소문자라는 것에 주의해야 한다. 대문자로 한참을 구해놓고 '왜 틀렸지???'하며 엉뚱한 곳을 뒤적이던 나여...

코드

#include<iostream>
#include<string>
#include<stack>

using namespace std;

int main() {
	while (true) {
		string str;
		getline(cin, str);

		if (str == ".") {
			break;
		}

		stack<char> s;
		bool x = 0;

		for (int i = 0; i < str.length(); i++) {
			if ((str[i] == '(') || (str[i] == '[')) {
				s.push(str[i]);
			}
			else if (str[i] == ')') {
				if (!s.empty() && s.top() == '(') {
					s.pop();
				}
				else {
					x = 1;
					break;
				}
			}
			else if (str[i] == ']') {
				if (!s.empty() && s.top() == '[') {
					s.pop();
				}
				else {
					x = 1;
					break;
				}
			}
		}

		if (x == 0 && s.empty()) {
			cout << "yes" << endl;
		}
		else {
			cout << "no" << endl;
		}

	}

}
profile
https://jiwonna52.tistory.com/

0개의 댓글