case 별로 push, pop 을 수행하도록 구현하였습니다.
{,(,[ 모두 합쳤을 때 pair 로 입력이 되어야 하므로, stack array는
MAX(10000)/2 로 잡고 5000 이 넘으면 짝이 맞지 않는 것으로 합니다.
입력 끝까지 해결했는데, stack array에 값이 있으면, 짝이 맞지 않는 것으로 하였습니다.
오류가 나오는데 추가로 고려해야 할 것이 있는지 검토 요청드립니다
#include <stdio.h>
#include <string.h>
int top, bottom;
char bracket[5000];
int push(int data)
{
if (top < 5000)
top++;
else
return -1;
bracket[top] = data;
return 0;
}
int pop(int data)
{
if (top == -1 )
return -1;
if (bracket[top] != data)
return -1;
else
{
bracket[top] = 0;
if (top > -1)
top--;
return 0;
}
}
int main(void)
{
int i, j, ret;
unsigned int test_case, N=0;
char buf[10001];
//freopen("input.txt", "r", stdin);
setbuf(stdout, NULL);
scanf("%d", &N);
if (N > 100)
return 1;
for (test_case = 0; test_case <= N; test_case++)
{
memset(buf, 0, sizeof(buf));
memset(bracket, 0, sizeof(bracket));
scanf("%s", buf);
i = 0;
top = -1;
bottom = 0;
while (buf[i])
{
ret = 0;
switch (buf[i]){
case '(':
ret = push(1);
break;
case ')':
ret = pop(1);
break;
case '{':
ret = push(2);
break;
case '}':
ret = pop(2);
break;
case '[':
ret = push(3);
break;
case ']':
ret = pop(3);
break;
}
if (ret)
break;
i++;
}
if (ret)
printf("No\n");
else
{
if (bracket[bottom])
printf("No\n");
else
printf("Yes\n");
}
}
return 0;
}
uecoyk
case 별로 push, pop 을 수행하도록 구현하였습니다.
{,(,[ 모두 합쳤을 때 pair 로 입력이 되어야 하므로, stack array는
MAX(10000)/2 로 잡고 5000 이 넘으면 짝이 맞지 않는 것으로 합니다.
입력 끝까지 해결했는데, stack array에 값이 있으면, 짝이 맞지 않는 것으로 하였습니다.
오류가 나오는데 추가로 고려해야 할 것이 있는지 검토 요청드립니다
10년 전