4949번 균형잡힌 세상 문제를 풀어보았다.
4949 균형잡힌 세상
https://www.acmicpc.net/problem/4949
4949번: 균형잡힌 세상
문제 세계는 균형이 잘 잡혀있어야 한다. 양과 음, 빛과 어둠 그리고 왼쪽 괄호와 오른쪽 괄호처럼 말이다. 정민이의 임무는 어떤 문자열이 주어졌을 때, 괄호들의 균형이 잘 맞춰져 있는지 판단하는 프로그램을 짜는 것이다. 문자열에 포함되는 괄호는 소괄호("()") 와 대괄호("[]")로 2종류이고, 문자열이 균형을 이루는 조건은 아래와 같다. 모든 왼쪽 소괄호("(")는 오른쪽 소괄호(")")와만 짝을 이룰 수 있다. 모든 왼쪽 대괄호("[")는 오른쪽 대
www.acmicpc.net
이 문제는 단순하게 괄호들이 앞 뒤로 잘 닫혀있는지 확인하고, 잘 닫혀있다면 yes, 아니면 no를 출력하는 문제이다.
확실하게 단순한 문제라서 stack에 대충 넣어서 풀었다.
#include <stdio.h>
int i,top,n,chk[101];
char str[101];
void push(){top++; chk[top]=str[i];}
int pop(){if((str[i]==')' && chk[top]=='(') || (str[i]==']' && chk[top]=='[')) {top--; return 1;}else return 0;}
int main()
{
while(1) {
gets(str);
top=-1;
n=1;
if(str[0]=='.') break;
for(i=0;str[i]!='.'; i++) {
if(!n) continue;
if(str[i]=='(') push();
if(str[i]=='[') push();
if(str[i]==']') n=pop();
if(str[i]==')') n=pop();
}
if(top==-1 && n) puts("yes");
else puts("no");
}
}