Dolphins의 HelloWorld

[백준]Baekjoon4949(Stack) 본문

Algorithm/baekjoon문제풀이

[백준]Baekjoon4949(Stack)

돌핀's 2018. 7. 1. 18:12


이 문제에서 가장 중요한 것은 이 문제가 스택을 이용하는 문제라는 것임을 파악하는 것이다.


스택을 이용하지 않는다면 


"( [ ) ]" 이런 문자열이 나왔을 때 괄호가 대응되지 않는다는것을 나타내기가 어렵다.


그러나 스택을 쓴다면 스택의 가장 맨 위에있는 괄호가 가장 최근에 쓰여진 괄호이기 때문에


스택의 맨위에 있는것과 새롭게 들어가는 문자를 비교하면서 괄호가 대응되는지


판단하는것이 용이하다.


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

using namespace std;

int main()
{
	string s;
	while (getline(cin, s)) {
		stack<char> stk; bool b = true;
		if (s[0] == '.') break;
		for (int i = 0; i < s.length(); i++) {
			if (s[i] == '(' || s[i] == '[') stk.push(s[i]);
			else if (s[i] == ')') {
				if (stk.size() != 0 && stk.top() == '(') {
					stk.pop();
				}
				else {
					b = false; break;
				}
			}
			else if (s[i] == ']') {
				if (stk.size() != 0 && stk.top() == '[') stk.pop();
				else {
					b = false; break;
				}
			}
		}
		if (!b || stk.size() != 0) cout << "no" << '\n';
		else cout << "yes" << '\n';
	}
}

'Algorithm > baekjoon문제풀이' 카테고리의 다른 글

[백준]Baekjoon1463(Dynamic Programming)  (0) 2018.07.09
[백준]Baekjoon11279(Priority_queue)  (0) 2018.07.04
[백준]Baekjoon1076(map)  (0) 2018.07.01
[백준]Baekjoon10866(Deque)  (0) 2018.06.28
[백준]Baekjoon1966(Queue)  (0) 2018.06.28
Comments