반응형
2504번: 괄호의 값
4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일
www.acmicpc.net
[ 한국정보올림피아드 2008년 지역본선 중등부 괄호의 값 입출력 데이터 ]
2008년 지역본선 괄호의 값 입출력데이터.zip
0.01MB
[ 한국정보올림피아드 2008년 지역본선 중등부 괄호의 값 소스 코드 ]
#include <stdio.h>
#include <string.h>
char a[33],stack[33];
bool check;
int l,top,b[33];
int main()
{
int i,j;
scanf("%s",a);
l=strlen(a);
for(i=0;i<l;i++)
{
if(a[i]=='(')
stack[top++]='(';
if(a[i]=='[')
stack[top++]='[';
if(a[i]==')')
{
if(stack[top-1]=='(')
stack[--top]=0;
else
break;
}
if(a[i]==']')
{
if(stack[top-1]=='[')
stack[--top]=0;
else
break;
}
if(top<0)
break;
}
if(top!=0 || i!=l)
{
printf("0\n");
return 0;
}
for(i=0;i<l;i++)
{
if(a[i]=='(')
b[i]=-1;
if(a[i]==')')
b[i]=-2;
if(a[i]=='[')
b[i]=-3;
if(a[i]==']')
b[i]=-4;
}
check=true;
while(check)
{
check=false;
for(i=0;i<l-1;i++)
{
if(b[i]==-1 && b[i+1]==-2)
{
b[i]=2;
for(j=i+1;j<l-1;j++)
b[j]=b[j+1];
b[l-1]=0;
l--;
check=true;
break;
}
if(b[i]==-3 && b[i+1]==-4)
{
b[i]=3;
for(j=i+1;j<l-1;j++)
b[j]=b[j+1];
b[l-1]=0;
l--;
check=true;
break;
}
}
}
check=true;
while(check)
{
check=false;
for(i=0;i<l-1;i++)
{
if(0<b[i] && 0<b[i+1])
{
b[i]=b[i]+b[i+1];
for(j=i+1;j<l-1;j++)
b[j]=b[j+1];
b[l-1]=0;
l--;
check=true;
break;
}
if(b[i]==-1 && 0<b[i+1] && b[i+2]==-2)
{
b[i]=b[i+1]*2;
for(j=i+1;j<l-2;j++)
b[j]=b[j+2];
b[l-2]=b[l-1]=0;
l-=2;
check=true;
break;
}
if(b[i]==-3 && 0<b[i+1] && b[i+2]==-4)
{
b[i]=b[i+1]*3;
for(j=i+1;j<l-2;j++)
b[j]=b[j+2];
b[l-2]=b[l-1]=0;
l-=2;
check=true;
break;
}
}
}
printf("%d\n",b[0]);
return 0;
}
반응형
'백준 문제풀이' 카테고리의 다른 글
백준 1546번 - 평균 소스 코드 (0) | 2021.04.18 |
---|---|
백준 10825번 - 국영수 소스 코드 (0) | 2021.04.18 |
백준 2568번 2565번 - 전깃줄 (0) | 2021.04.16 |
백준 2503번 - 숫자 야구 (0) | 2021.04.15 |
백준 2591번 - 숫자 카드 (0) | 2021.04.15 |