stack을 이용한건 아니지만 웬만한 케이스는 다 정상적으로 나오는데 오답으로 표시가 되네요..
혹시 오류 케이스가 보이시는 분들 조언해주시면 감사하겠습니다.
#include <stdio.h>#include <string.h>#include <malloc.h>#pragma warning(disable:4996)char*substring(char*string,inta,intb);intmain(void){intC;//Test Casecharstring[10001];//입력받을 문자열intlen=-1;//문자열의 길이intn=0;//indexintpair_index;//짝이 되는 괄호의 indexintflag=0;//0이면 YES, 1이면 NOscanf("%d",&C);while(C>0){//일련의 괄호로 이루어진 문장이 주어지는데 ( 와 ), { 와 }, [ 와 ]가 짝이 맞아야함//짝과 순서에 맞으면 "YES" 출력, 아니면 "NO" 출력//배열을 구성//처음부터 차례로 기입//닫는 괄호는 바로 다음이거나 맨 마지막.//n번째 원소인 여는 괄호에 대해, 닫는 괄호는 n + 1이거나 len - n일듯//짝이 맞으면 소거.//중간에 짝이 안맞는게 검출되거나 다 지워봤는데 괄호가 남아있으면 NO 출력//끝까지 다 지워서 문자열이 비어있게 되면 YES 출력len=-1;flag=0;scanf("%s",string);//문자열 입력while(len!=0){len=strlen(string);//문자열의 길이를 저장if(string[n]=='('){if(string[n+1]==')')pair_index=n+1;elseif(string[len-n-1]==')')pair_index=len-n-1;}elseif(string[n]=='{'){if(string[n+1]=='}')pair_index=n+1;elseif(string[len-n-1]=='}')pair_index=len-n-1;}elseif(string[n]=='['){if(string[n+1]==']')pair_index=n+1;elseif(string[len-n-1]==']')pair_index=len-n-1;}else{flag=1;break;}if(pair_index==n+1)strcpy(string,substring(string,n+2,len));elseif(pair_index==len-n-1)strcpy(string,substring(string,n+1,pair_index-1));else{flag=1;break;}len=strlen(string);//문자열의 길이를 저장}if(flag==0)printf("YES\n");elseprintf("NO\n");C--;}return0;}char*substring(char*string,inta,intb){//문자열 string과 인덱스 a와 b를 받아 string[a]부터 string[b]까지로 이루어진 문자열을 반환//a < bchar*substring;//자른 문자열inti,j=0;//indexsubstring=(char*)malloc(sizeof(char)*(b-a+2));for(i=a;i<=b;i++){substring[j]=string[i];j++;}substring[j]='\0';returnsubstring;}
furyhunter
BRACKETS2 문제입니다.
stack을 이용한건 아니지만 웬만한 케이스는 다 정상적으로 나오는데 오답으로 표시가 되네요..
혹시 오류 케이스가 보이시는 분들 조언해주시면 감사하겠습니다.
9년 전