May 22, 2020 ( last updated : May 22, 2020 )
Algorithm
C++
https://github.com/sneakstarberry/
백준 4949 균형잡힌 세상문제 입니다.
대괄호(“[]”)와 소괄호(“()”)가 서로 짝이 맞춰져 있는지 확인하는 프로그램입니다.
while
로 계속 반복을 하면서 getline
함수로 문자열을 받아와 줍니다. “.”ㅇㄹ 만나게 되면 멈춥니다.
먼저 왼쪽 괄호는 소괄호든 대괄호든 상관이 없습니다. 둘 다 스택에 넣어줍니다. 이후 오른쪽 괄호를 만났을 때가 중요합니다. 이미 들어가 있는 것이 소괄호인데 오른쪽 대괄호를 만났다면 이는 균형이 맞지 않는 것입니다. 이와 반대의 경우도 마찬가지 입니다. 바로 no를 출력하면 되겠습니다.
하지만 똑같이 소괄호라면 pop메소드를 이용하여 빼주시고 같은행동을 반복합니다. 끝까지 flag
변수가 0이라면 yes
를 출력시켜 줍니다.
나머지는 반복입니다.
#include <iostream>
#include <cstring>
#include <stack>
using namespace std;
int main() {
while(true){
char chr[101];
cin.getline(chr, 101);
stack<char> stk;
int flag = 0;
if (!strcmp(chr, ".")) break;
for (int i=0; i<strlen(chr); i++){
if(chr[i] == '(' || chr[i] == '[') stk.push(chr[i]);
else if (chr[i] == ')'){
if (!stk.empty() && stk.top() == '(') stk.pop();
else {cout << "no\n"; flag=1; break;}
}
else if (chr[i] == ']') {
if (!stk.empty() && stk.top() == '[') stk.pop();
else { cout << "no\n"; flag = 1; break;}
}
}
if (flag) continue;
if (!stk.empty()) cout << "no\n";
else cout << "yes\n";
}
}
Originally published May 22, 2020
Latest update May 22, 2020
Related posts :