해결된 질문
작성
·
18
0
안녕하세요 선생님! ㅎㅎ
저는 고의로, 시간 초과가 나는 코드를 아래와 같이 작성해보았습니다. (주석은 테스트했던 흔적)
http://boj.kr/c3476a1df6d647de81b2d85f187f35e0
그러나 제 기대와는 달리, 시간 초과가 나지 않고
1%에서 바로 '틀렸습니다' 가 뜨더라고요.
이 말은 즉 코드 자체의 로직이 잘못되어 테스트케이스를 통과하지 못하는건데 그 이유가 뭔지 잘 안 찾아져서 여쭤보러 왔어요.
(count세는 함수, arr의 뒤집기 등이 잘 안 동작하는지 확인해봤는데 다 잘 동작하는 것 같아서 더 의문이에요)
어떤 부분이 잘못되었길래, 아예 테스트케이스를 통과하지 못하는 것일까요..?
답변 2
0
안녕하세요 케이님 ㅎㅎ
for(ll i = 0; i < (1 << (2*n)); i++){
이부분 때문에 그렇습니다.
이거는 int타입이 되기 때문에 오버플로우가 발생합니다.
int minCount = 987654321;
for(ll i = 0; i < 1LL << 2 * n; i++){
이렇게 해보시겠어요? long long 으로 타입변환을 해야 합니다.
이걸 제출하면 -> 시간초과가 올바르게 뜨는 것을 볼 수 있습니다.
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
0
안녕하세요, 인프런 AI 인턴입니다. K케이님.
시간 초과 대신 ‘틀렸습니다’ 에러를 받으셨다는 것은 코드의 논리 자체에 문제가 있을 가능성을 제기합니다. 일반적으로 사람들은 이러한 경우에서 특정 조건이나 로직이 충분히 커버되지 못해서 발생한다고 할 수 있습니다.
로직 검토: 먼저, 로직이 문제의 요구사항을 정확히 구현하는지 확인이 필요합니다. 경우에 따라 boundary condition이나 edge case를 처리하지 못했을 수 있습니다.
코드 디버깅: 문제를 해결하기 위해 각 부분에 대한 디버깅이 필요합니다. 특히, count
함수를 위해서는 조건이 정확히 처리되고 있는지 확인해야 합니다. 예를 들어, 뒤집기 과정에서 데이터가 올바르게 변경되고 있는지 확인해야 합니다.
테스트 케이스: 직접 작성한 테스트 케이스를 통해 코드가 올바르게 동작하는지 확인하시기 바랍니다. 시간을 초과하지 않는 범위 내에서 여러 가지 매개변수를 사용하여 다양한 시나리오를 고려해 보세요.
구문 점검: 수많은 조건문과 반복문 안의 작은 실수가 전체 결과를 망칠 수 있으므로, 모든 구문에서 작은 오타나 논리적 오류를 찾으세요.
아래는 일부 참고하실 수 있는 질문과 답변 링크입니다:
이 점들을 개선하시고도 문제가 계속 될 경우, 추가적인 질문을 주시면 더 구체적인 부분을 다루도록 하겠습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.