BRACKET2 오답인 이유를 모르겠습니다. 도와주세요 susul89 괄호를 순서대로 맞추는 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; } } } 9년 전
1개의 댓글이 있습니다. fleo0917 )( 9년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
susul89
괄호를 순서대로 맞추는 BRACKET2계속 오답이 나네요.
문제에 나와있는 case나 댓글에 적어주신 case모두
알맞게 답이 출력이 되는데 무엇떄문에 오답이 나는 것인지 모르겠습니다.
알고리즘의 원리는
왼쪽괄호를 차례대로 쌓고, 오른쪽 괄호를 또 차례대로 쌓고
가장 마지막에 있는 녀석끼리 비교를 하게 되며
cross를 막기 위해서
딱 스트링의 숫자만큼 반복해서 다 제거되지 않으면
No가 나오게 만들었습니다.
9년 전