작성
·
8
·
수정됨
0
안녕하세요, 4-O 15926번 문제 질문드립니다.
저는 다른 아이디어 없이, 스택으로 경우의 수를 처리하려고 했습니다만 어떤 테스트케이스에서 틀렸다고 나오는지 모르겠어서 질문드립니다!
http://boj.kr/85e34b6b58404d3fa9c80c8c7b62a176
위의 코드의 경우 다음의 아이디어를 핵심으로 구현되어있습니다.
짝이 맞는 경우 "()" 에는 len에 2를 더한다. 동시에, pop해서 없앤다.
짝이 맞지 않는 경우에는 maxLen을 현재까지 쌓인 len으로 갱신을 시도하고, len을 초기화한다. (스택을 비워두지 않기 위해 이때는 ')' 라도 스택에 push 한다.
만약 stack이 비게되면, 이땐 acc에 그 길이를 누적해둔다. (전부 이어져있으므로)
전부 다 살펴본 뒤에, acc와 len중 최대값으로 한번더 maxLen을 갱신하며 마무리한다.
위의 아이디어는 도중에 올바른 괄호문자열이 아닌 경우도 전부 계산할 수 있고, 차마 계산하지 못하고 마무리되는 경우도 4번에 의해 계산되니 문제 없다고 판단했습니다.
위의 로직에는 어떤 문제가 존재하는걸까요?
어떤 테스트케이스에서 걸리는걸까요?
감사합니다!
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. K케이님.
주어진 문제에 대해 몇 가지 체크 포인트와 함께 관련된 유사한 질문 및 답변을 소개해드리겠습니다. K케이님이 만든 로직은 일반적으로 올바른 방향이지만, 테스트 케이스에 의해 누락되거나 예외적으로 처리되지 않는 부분이 있을 가능성이 큽니다.
스택을 비운 후 처리 로직 검토: 스택이 비어있는 경우 특별한 조치를 취하셨다라면, 이 경우 다음 스택이 처음부터 다시 작동할 수 있도록 로직을 재검토해 보세요. 스택이 비워지면 바로 추가되는 괄호들에 대해서도 누적되었는지 확인이 필요합니다.
시작점과 끝점 처리: 시작점과 끝점 처리에서 괄호가 맞지 않는 경우를 특별히 반례로 만들어 체크하세요. 모든 괄호가 올바르게 매치되지 않으면 최종 max 연산에서 누락되는 경우가 발생할 수 있습니다.
다루지 않는 반례 찾기: 스택이 비지 않았을 때와 스택이 이미 찬 경우, (())(()
등과 같은 케이스를 추가로 테스트해보세요. 괄호 조합이 불완전하지만, 기저 조건에서 중간에 매칭이 완료되는 경우도 처리되는지 확인이 필요합니다.
상황 매칭 로직 점검: 매칭이 성사된 경우에 조건이 열리거나 닫힐 때, 초기화한 부분에서 조건이 올바르게 처리되고 있는지 플로우를 확인하세요.
아래는 관련된 기존 질문을 다룬 유사한 사례입니다:
위 내용을 바탕으로 다양한 케이스를 통해 문제 해결의 실마리를 찾으시길 바라며, 더 궁금한 점이 있으시면 언제든지 추가 질문을 남겨주세요. 저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해 드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.