Mismatched Brackets 질문입니다. 햇반2 https://algospot.com/judge/problem/read/BRACKETS2 (, {, [ 입력시 종류에 따라 스택에 넣은 후 ), }, ] 입력될 경우 스택의 top을 체크하여 짝이 맞는지 체크하고 있습니다. 루프 마지막에는 오픈 Brackets의 처리를 해 주고 있습니다. 제출시 오답처리가 되고 있는데 조언 부탁드립니다. #include <iostream> #include <string> using namespace std; int main() { int testCase = 0; int size = 0; int top = -1; int stack[10000] = { 0 }; char input[10000] = { 0 }; int outCnt = 0; string* outStr; cin >> testCase; outStr = new string[testCase]; for (int i = 0; i < testCase; i++) { cin >> input; while (input[size] != '\0'){ size++; } for (int j = 0; j < size; j++) { if (input[j] == '(') stack[++top] = 1; else if (input[j] == '{') stack[++top] = 2; else if (input[j] == '[') stack[++top] = 3; else if (input[j] == ')') { if (stack[top] == 1) { stack[top--] = 0; } else { outStr[outCnt++] = "NO"; break; } } else if (input[j] == '}') { if (stack[top] == 2) { stack[top--] = 0; } else { outStr[outCnt++] = "NO"; break; } } else if (input[j] == ']') { if (stack[top] == 3) { stack[top--] = 0; } else { outStr[outCnt++] = "NO"; break; } } if (j == size - 1) { if(top == -1) outStr[outCnt++] = "YES"; else outStr[outCnt++] = "NO"; } } top = -1; } for (int i = 0; i < testCase; i++) cout << outStr[i] << endl; } 9년 전
3개의 댓글이 있습니다. JongMan ))) 같은 형태의 입력이 주어질 때 메모리 참조 오류가 나는 것 같네요. 배열 크기에도 문제가 있습니다. 9년 전 link 햇반2 말씀해주신 부분들 생각해 보았는데 1. top이 -1일때(stack[-1]일때) 배열값을 참조하여 비교하는것 2. 배열에 +1을 더 안해준것 문제라고 생각하고 있습니다. 수정은 해봤는데 계속 오답이 뜨네요 혹시 로직 자체가 틀린것인지요...?? 9년 전 link 햇반2 아 메모리 초기화를 안해줘서 발생했던것 같습니다. 감사합니다! 9년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
햇반2
https://algospot.com/judge/problem/read/BRACKETS2
(, {, [ 입력시 종류에 따라 스택에 넣은 후
), }, ] 입력될 경우 스택의 top을 체크하여
짝이 맞는지 체크하고 있습니다.
루프 마지막에는 오픈 Brackets의 처리를 해 주고 있습니다.
제출시 오답처리가 되고 있는데 조언 부탁드립니다.
9년 전