input1에 수정할 괄호들을 문자열로 받고 input2에 우선순위대로 4문자를 받게 짯구요
input1문자열을 찾다가 닫는 괄호가 나오면 거기서부터 반대로 여는 괄호를 찾은 다음에 여는 괄호가 나타나면 우선순위를 비교하여 우선순위가 높은 괄호로 바꾸는 식으로 짰습니다.
어느부분이 오답인지 제가 놓친 test case를 알려주셨으면 합니다~
혹은 제가 문제를 잘못 이해하고있다면 알려주시기 바랍니다~
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int FindPriority(char Target, char String[4]);
int Compare(char Target);
char Priority[4];
char Input1[101];
char Input2[5];
char Output[101];
int main()
{
int T;
scanf("%d", &T);
int n;
int N;
int i, j;
int Count = 0;
for (n = 0; n < T; n++)
{
scanf("%s %s", &Input1, &Input2);
N = strlen(Input1);
for (i = 0; i < N; i++)
{
if (!Compare(Input1[i]))
{
for (j = i - 1; j > -1; j--)
{
if (Compare(Input1[j]))
{
if (FindPriority(Input1[j], Input2)>FindPriority(Input1[i], Input2))
{
Output[j] = Input1[j];
if (Output[j] == '<')
Output[i] = '>';
else if (Output[j] == '{')
Output[i] = '}';
else if (Output[j] == '(')
Output[i] = ')';
else if (Output[j] == '[')
Output[i] = ']';
Input1[j] = '\0';
Input1[i] = '\0';
}
else if (FindPriority(Input1[j], Input2)<FindPriority(Input1[i], Input2))
{
Output[i] = Input1[i];
if (Output[i] == '>')
Output[j] = '<';
else if (Output[i] == '}')
Output[j] = '{';
else if (Output[i] == ')')
Output[j] = '(';
else if (Output[i] == ']')
Output[j] = '[';
Input1[j] = '\0';
Input1[i] = '\0';
}
else
{
Output[i] = Input1[i];
Output[j] = Input1[j];
Input1[j] = '\0';
Input1[i] = '\0';
}
break;
}
}
}
}
for (i = 0; i < N; i++)
{
printf("%c", Output[i]);
Output[i] = '\0';
}
printf("\n");
}
}
int FindPriority(char Target, char String[4]) //우선순위 찾기
{
int i;
if (Target == '>' || Target == '<')
{
for (i = 0; i < 4; i++)
{
if (String[i] == '<' || String[i] == '>')
return 3 - i;
}
}
else if (Target == '{' || Target == '}')
{
for (i = 0; i < 4; i++)
{
if (String[i] == '{' || String[i] == '}')
return 3 - i;
}
}
else if (Target == ')' || Target == '(')
{
for (i = 0; i < 4; i++)
{
if (String[i] == '(' || String[i] == ')')
return 3 - i;
}
}
else if (Target == '[' || Target == ']')
{
for (i = 0; i < 4; i++)
{
if (String[i] == '[' || String[i] == ']')
return 3 - i;
}
}
}
int Compare(char Target) //여는건지 닫는건지 확인
{
if (Target == '{' || Target == '[' || Target == '(' || Target == '<')
{
return 1;
}
else if (Target == '}' || Target == ')' || Target == ']' || Target == '>')
return 0;
}
anhbbb
input1에 수정할 괄호들을 문자열로 받고 input2에 우선순위대로 4문자를 받게 짯구요
input1문자열을 찾다가 닫는 괄호가 나오면 거기서부터 반대로 여는 괄호를 찾은 다음에 여는 괄호가 나타나면 우선순위를 비교하여 우선순위가 높은 괄호로 바꾸는 식으로 짰습니다.
어느부분이 오답인지 제가 놓친 test case를 알려주셨으면 합니다~
혹은 제가 문제를 잘못 이해하고있다면 알려주시기 바랍니다~
10년 전