끄적끄적 코딩
article thumbnail
728x90

스택 문제입니다.

1. 문자를 getline으로 줄 단위로 받습니다.
2. 각 문자를 확인하여 (, ), [, ]에 대해서 처리를 합니다.
3. (, [의 경우 stack에 push해줍니다.
   )은 !empty이면서 top에 (가 있으면 pop해줍니다. 아닐 시 flag = true (초기값 false)
   ]도 !empty이면서 top에 [가 있으면 pop해줍니다. 아닐 시 flag = true
4. 모든 문자를 확인 한 후 flag가 true거나, !empty()면 no를 출력 아닐 시 yes를 출력

 

#include <iostream>
#include <cstring>
#include <stack>
#include <string>
#include <algorithm>
using namespace std;

int main(int argc, char *argv[])
{
	bool flag;
	string str;
	stack<char> s;

	while (1) {
		flag = false;

		while (!s.empty()) {
			s.pop();
		}

		getline(cin, str);

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

		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 {
					flag = true;
					break;
				}
			}
			else if (str[i] == ']') {
				if (!s.empty() && s.top() == '['){
					s.pop();
				}
				else {
					flag = true;
					break;
				}
			}
		}
		if (!s.empty() || flag == true) {
			cout << "no" << endl;
		}
		else {
			cout << "yes" << endl;
		}
	}

	return 0;
}

'알고리즘' 카테고리의 다른 글

[C++] 백준 17298번 오큰수  (2) 2019.09.05
[C++] 백준 1874번 스택 수열  (0) 2019.09.05
[C++] 백준 9012번 괄호  (0) 2019.09.04
[C++] 백준 2164번 카드2  (0) 2019.09.04
[C++] 백준 10773번 제로  (0) 2019.09.04

검색 태그