컴굥일지
[BOJ/백준 4949][C++] 균형잡힌 세상 본문
반응형
문제
https://www.acmicpc.net/problem/4949
문제 내용
문장을 입력받아서 문장 안에 있는 괄호를 순서대로 체크하여 균형 잡혀있는지 아닌지를 판단하는 문제이다.
. 하나만 들어왔을 때, 프로그램이 종료되게 해야 한다.
문제 풀이
[백준 9012 괄호] 문제에서 조금 발전된 형태라고 생각하면 된다.
다만, 문장 안에서 ( ) [ ] 이 네 가지 괄호만 체크해야 하고, 입력되는 문자열에 공백이 포함된다는 것에 유의하자.
입력 문자열에 공백이 포함되었기 때문에 getline을 이용해서 한 줄을 입력받으면 된다.
또한, checkVPS함수를 약간 수정해주면 된다.
( [ 이 두 가지 종류의 괄호는 스택에 그대로 추가해주면 된다.
하지만, ) ] 이 닫는 괄호들은 스택의 top에 자신과 매칭 되는 여는 괄호가 있을 때만 올바른 경우이다.
코드
#include <iostream>
#include <stack>
#include <string>
using namespace std;
bool checkVPS(string tmp) {
stack<char>s;
for (int i = 0; i < tmp.size(); i++) {
if (tmp[i] == '(') {
s.push('(');
}
else if (tmp[i] == '[') {
s.push('[');
}
else if (tmp[i] == ')') {
if (s.empty()) return false;
else if (s.top() != '(') return false;
else s.pop();
}
else if (tmp[i] == ']') {
if (s.empty()) return false;
else if (s.top() != '[') return false;
else s.pop();
}
}
if (s.empty()) return true;
else return false;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
string tmp;
while (true) {
getline(cin,tmp);
if (tmp == ".") break;
string result = checkVPS(tmp) ? "yes" : "no";
cout << result << '\n';
}
}
반응형
'알고리즘 > 코테 문제' 카테고리의 다른 글
[BOJ/백준 5585][C++] 거스름돈 (0) | 2022.04.21 |
---|---|
[BOJ/백준 2605][C++] 줄 세우기 (0) | 2022.04.17 |
[BOJ/백준 2930][C++] 가위 바위 보 (0) | 2022.04.15 |
[BOJ/백준 1181][C++] 단어 정렬 (0) | 2022.04.10 |
[BOJ/백준 2164][C++] 카드2 (0) | 2022.04.09 |
Comments