Notice
Recent Posts
Recent Comments
Link
알고리즘 모음(C++)
백준 4949 - 균형잡힌 세상(C++) 본문
문제 링크입니다. https://www.acmicpc.net/problem/4949
Stack을 사용한 문제입니다.
괄호가 정확히 사용되었는지를 물어보는 문제였습니다.
Stack을 사용했습니다. '(' or '[' 과 같이 여는 괄호는 stack에 저장한 뒤, ')' or ']'와 같이 닫는 괄호가 입력되면 stack의 top을 확인해 쌍이 맞는지를 확인합니다.
쌍이 전부 맞았으며, stack에 남아있는 수가 없을 경우 yes를 출력하고 그 이외의 모든 경우는 no를 출력하면 됩니다.
문제 접근 방법
1. 문장을 입력 받는다.
2. 문장이 '.'로만 구성되 있으면 break 해준다.
3. 여는 괄호는 stack에 저장한다.
4. 닫는 괄호는 stack의 top과 비교한다.
자세한 것은 코드를 참고해 주세요
#define _CRT_SECURE_NO_WARNINGS
#include <cstring>
#include <vector>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cmath>
#include <cstdio>
#include <string>
#include <deque>
#include <stack>
using namespace std;
void solve() {
while (1) {
string sentence;
stack<char> Find;
bool flag = true;
getline(cin, sentence);
if (sentence[0] == '.') break;
for (int i = 0; i < sentence.size(); i++) {
if (sentence[i] == '(' || sentence[i] == '[') Find.push(sentence[i]);
else if (sentence[i] == ')') {
if (!Find.empty() && Find.top() == '(') Find.pop();
else {
cout << "no" << "\n";
flag = false;
break;
}
}
else if (sentence[i] == ']') {
if (!Find.empty() && Find.top() == '[') Find.pop();
else {
cout << "no" << "\n";
flag = false;
break;
}
}
}
if (flag) {
if (!Find.empty()) cout << "no" << "\n";
else cout << "yes" << "\n";
}
}
}
int main() {
cin.tie(0);
cout.tie(0);
solve();
return 0;
}
질문 및 조언 댓글 남겨주세요!
'백준' 카테고리의 다른 글
백준 18111 - 마인크래프트(C++) (0) | 2021.11.06 |
---|---|
백준 1966 - 프린터 큐(C++) (0) | 2021.11.05 |
백준 1436 - 영화감독 숌(C++) (0) | 2021.11.03 |
백준 10866 - 덱(C++) (0) | 2021.11.03 |
백준 10816 - 숫자 카드2(C++) (0) | 2021.11.03 |