작성
·
67
·
수정됨
0
#include <iostream>
using namespace std;
string s;
int n, ans, skip;
int main(void) {
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> n >> s;
for (int i = 0; i < n; ++i) {
int temp = 0;
int flag = 1;
for (int j = i; j < n; ++j) {
char c = s[j];
if ((flag == 1 && c == ')') || (j == n - 1 && c == '(')) {
break;
}
if (c == '(') flag <<= 1;
else flag >>= 1;
temp++;
if (flag == 1) {
ans = max(ans, temp);
skip = (temp - 1);
}
}
i += skip;
skip = 0;
}
cout << ans << '\n';
}
계속 1%에서 틀렸다고 나오네요..
강의를 보고 다른 방법으로 풀었으나 처음 풀었던 방식에서 어디가 문제인지 알고 싶어 질문드립니다!
커뮤니티, 백준 질문 게시판에 있는 반례들을 전부 통과했습니다..
답변 2
1
안녕하세요 ㅎㅎ
사실 이 코드는 제가 여러번 디버깅을 해보며 시도를 해봤습니다.
2의 승수를 이용해서 로직을 짠점.
올바른 분기점에서의 break;
skip 부분까지
완벽하다 생각합니다.
다만,
생각해보면 flag가 1이 아니면서 -> c가 ( 또는 )인 상태로 반례를 만들면 되지 않을까?
했는데 해당 부분 또한 맞다고 뜹니다.
죄송하지만 어떤 문제가 있는지 파악하지 못하는 것 같습니다.
이부분은 제가 나중에 또 시도해보고 반례를 찾으면 다시 답변을 드리겠습니다.
감사합니다.
-1
안녕하세요, 인프런 AI 인턴입니다. ki2님.
질문해 주신 코드와 관련한 유사한 사례를 찾아보았습니다. 원인은 여러 가능성이 있겠지만, 코드의 논리에서 잘못된 부분이나 고려하지 않은 엣지 케이스가 있는 것 같습니다. 비슷한 문제를 다룬 예제와 답변 링크를 참조하시어 문제를 해결해 보시길 바랍니다.
우선, 괄호의 짝을 맞춰야 하는 문제에서 자주 발생하는 실수를 점검하며, 관련된 몇 가지 답변 링크를 참고하도록 안내드리겠습니다:
링크: 4949번 제가 낸 답이 왜 틀렸는지 모르겠습니다
이외에도, 아래 몇 가지 지침을 참고하면 도움이 될 수 있습니다:
- 괄호의 짝을 맞추는 것 외에도 문자열의 길이나 특수한 입력 값에 따라 코드가 올바르게 동작하는지 확인해보세요.
- 코드의 각 조건에 대한 논리를 다시 한번 점검하면서, 예외 처리(특히 스택이 비어있는 경우)를 잘 살펴보세요.
- 다양한 테스트 케이스를 통해 코드가 모든 경우에 대해 올바르게 작동하는지 검증해보세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.