panteoniq   6년 전

반례로 나온 예제들을 다 돌려봐도 정답으로 나오는데 어디서 문제인지 알려주실 분 계신가요...?

djm03178   6년 전

문제로 추정되는 건 하나네요. n이 작게 주어졌을 때, dp[0]~dp[3]까지 대입하는 것 자체가 할당받은 메모리 범위를 초과합니다. 그 말은, 값을 대입한 후에 실제 그 메모리를 차지하고 있는 다른 변수 등에 의해서 값이 덮어써질 수도 있다는 것입니다.

panteoniq   6년 전

아 그렇네요! 그 문제도 존재했네요. 그 부분도 수정해야겠습니다

근데 맨 밑의 endl을 지우니까 맞았다고 뜨던데 이것까지 신경을 써야 하나요?;

panteoniq   6년 전

전역 변수로 선언했던 int *dp를 int dp[10000001];로 수정했습니다. 이로써 메모리 할당 시 발생할 수 있는 문제를 해결했습니다

근본적인 원인은 endl이었습니다만 저 문제가 있을 줄은 몰랐네요. 감사합니다!

djm03178   6년 전

글쎄요? 원래는 모든 '줄'에는 마지막에 개행 문자를 넣는 게 맞다고 하는데 그걸 넣어서 틀린 일은 본 적이 없습니다. 그보다는, 제가 지적한 내용은 운에 따라 결과가 달라질 수 있는 거라서 정답 여부가 운으로 갈렸을 수도 있습니다.

panteoniq   6년 전

아...항상 같은 테스트 케이스로 채점하는 것은 아닌가 보군요

어떤 테스트 케이스에서 틀렸는지 알려줬으면 고치기 쉬웠을 텐데 그게 좀 아쉽습니다

지적 감사합니다 :)

djm03178   6년 전

채점은 같은 케이스로 합니다. 하지만, 메모리가 할당되는 위치는 매번 달라질 수 있죠. 할당되지 않은 메모리를 침범했을 때의 결과는 아무도 모릅니다.

댓글을 작성하려면 로그인해야 합니다.