stack을 이용한건 아니지만 웬만한 케이스는 다 정상적으로 나오는데 오답으로 표시가 되네요..
혹시 오류 케이스가 보이시는 분들 조언해주시면 감사하겠습니다.
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#pragma warning(disable:4996)
char *substring(char *string, int a, int b);
int main(void)
{
int C; //Test Case
char string[10001]; //입력받을 문자열
int len = -1; //문자열의 길이
int n = 0; //index
int pair_index; //짝이 되는 괄호의 index
int flag = 0; //0이면 YES, 1이면 NO
scanf("%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;
else if (string[len - n - 1] == ')')
pair_index = len - n - 1;
}
else if (string[n] == '{')
{
if (string[n + 1] == '}')
pair_index = n + 1;
else if (string[len - n - 1] == '}')
pair_index = len - n - 1;
}
else if (string[n] == '[')
{
if (string[n + 1] == ']')
pair_index = n + 1;
else if (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));
else if (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");
else
printf("NO\n");
C--;
}
return 0;
}
char *substring(char *string, int a, int b)
{
//문자열 string과 인덱스 a와 b를 받아 string[a]부터 string[b]까지로 이루어진 문자열을 반환
//a < b
char *substring; //자른 문자열
int i, j = 0; //index
substring = (char *)malloc(sizeof(char) * (b - a + 2));
for (i = a; i <= b; i++)
{
substring[j] = string[i];
j++;
}
substring[j] = '\0';
return substring;
}
furyhunter
[[problem:BRACKETS2]] 문제입니다.
stack을 이용한건 아니지만 웬만한 케이스는 다 정상적으로 나오는데 오답으로 표시가 되네요..
혹시 오류 케이스가 보이시는 분들 조언해주시면 감사하겠습니다.
10년 전