티스토리 뷰

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

 

4949번: 균형잡힌 세상

하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 각 줄은 마침표(".")로 끝난다

www.acmicpc.net

 

Stack를 활용하여 문제를 해결하였습니다. 단순이 '(' 나 '[' 일때는 스택에 넣어주고, ')', ']'를 만나면 스택에 있는 것과 비교해서 있으면 pop 후 넘어가고 없으면 break 시켜서 판별하였습니다.

 

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

using namespace std;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(nullptr);
	string s;
	while (1) {
		stack<char> bal;
		getline(cin, s);
		if (s == ".")
			break;
		for (auto c : s) {
			if (c == '[')
				bal.push(c);
			else if (c == '(')
				bal.push(c);
			else if (c == ']') {
				if (bal.empty()) {
					bal.push(c);
					break;
				}
				if (bal.top() == '[')
					bal.pop();
				else
					break;
			}
			else if (c == ')') {
				if (bal.empty()) {
					bal.push(c);
					break;
				}
				if (bal.top() == '(')
					bal.pop();
				else
					break;
			}
		}
		if (bal.empty())
			cout << "yes" << "\n";
		else
			cout << "no" << "\n";
	}
}

'자료구조 및 알고리즘 > 문제풀이' 카테고리의 다른 글

백준 C++ 2504번) 괄호의 값  (0) 2022.07.17
백준 C++ 10799번) 쇠막대기  (0) 2022.07.17
백준 C++ 10845번) 큐  (0) 2022.07.17
백준 C++ 10828번) 스택  (0) 2022.07.17
백준 C++ 1406번) 에디터  (0) 2022.07.16
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함