괄호를 순서대로 맞추는 BRACKET2계속 오답이 나네요.
문제에 나와있는 case나 댓글에 적어주신 case모두
알맞게 답이 출력이 되는데 무엇떄문에 오답이 나는 것인지 모르겠습니다.
알고리즘의 원리는
왼쪽괄호를 차례대로 쌓고, 오른쪽 괄호를 또 차례대로 쌓고
가장 마지막에 있는 녀석끼리 비교를 하게 되며
cross를 막기 위해서
딱 스트링의 숫자만큼 반복해서 다 제거되지 않으면
No가 나오게 만들었습니다.
#include <iostream>
#include<string>
#include <string.h>
#include <cstdlib>
using namespace std;
char First[2] = { '[', ']' };
char Second[2] = { '(', ')' };
char Third[2] = { '{', '}' };
bool AnswerCheck(char A, char B);
int main()
{
int Count;
cin >> Count;
while (Count--)
{
char Left_List[10005];
char Right_List[10005];
int MaxLeft = 0;
int MaxRight = 0;
string Input;
cin >> Input;
for (int i = 0; i < Input.length(); i++)
{
if (Input[i] == First[0] || Input[i] == Second[0] || Input[i] == Third[0])
{
Left_List[MaxLeft] = Input[i];
MaxLeft++;
}
if (Input[i] == First[1] || Input[i] == Second[1] || Input[i] == Third[1])
{
Right_List[MaxRight] = Input[i];
MaxRight++;
}
if (MaxLeft>0 && MaxRight>0)
{
if (AnswerCheck(Left_List[MaxLeft - 1], Right_List[MaxRight - 1]))
{
MaxRight--;
MaxLeft--;
}
}
}
if (MaxRight == 0 && MaxLeft == 0)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
}
bool AnswerCheck(char A, char B)
{
if (A == First[0])
{
if (B == First[1])
return true;
else
return false;
}
if (A == Second[0])
{
if (B == Second[1])
return true;
else
return false;
}
if (A == Third[0])
{
if (B == Third[1])
return true;
else
return false;
}
}
}
susul89
괄호를 순서대로 맞추는 BRACKET2계속 오답이 나네요.
문제에 나와있는 case나 댓글에 적어주신 case모두
알맞게 답이 출력이 되는데 무엇떄문에 오답이 나는 것인지 모르겠습니다.
알고리즘의 원리는
왼쪽괄호를 차례대로 쌓고, 오른쪽 괄호를 또 차례대로 쌓고
가장 마지막에 있는 녀석끼리 비교를 하게 되며
cross를 막기 위해서
딱 스트링의 숫자만큼 반복해서 다 제거되지 않으면
No가 나오게 만들었습니다.
11년 전