jwvg0425   2년 전

d 언어로 이 문제를 풀어보려고 했는데, 어떻게 해도 이해할 수 없는 런타임 에러와 틀렸습니다가 발생합니다.

코드는 아래 첨부했는데, 완전 동일한 로직을 c++로 작성할 경우 잘 통과되고(입력부 제외하고 복사붙여넣기했습니다 - https://www.acmicpc.net/source... ), d로는 18% 가량에서 틀렸습니다가 나오는데 어떻게 코드를 바꿔도 통과가 안 됩니다. 채점 환경과 동일한 컴파일러를 다운받고, 공개된 테스트 데이터 (  https://github.com/jwvg0425/So... )로 직접 테스트해볼 경우 모든 테스트 데이터에 대해 올바른 답을 출력합니다. 확인 부탁드립니다.

jwvg0425   2년 전

놀랍게도 지역 변수 선언만 바깥으로 옮기면 똑같은 로직이 틀렸습니다 => 맞았습니다 로 바뀌네요.

틀렸습니다 : https://www.acmicpc.net/source...
맞았습니다 : https://www.acmicpc.net/source...

yukariko   2년 전

부당한 제출이군요

startlink   2년 전

D언어의 GC가 예측할 수 없는 방식으로 동작한다는 사실을 알았습니다.

startlink   2년 전

@sbjwin 혹시 이 내용 원인 아실까요?

sbjwin   2년 전

글쎄요. 예측할 수 없는 상황이 발생했는데 부족하나마 제가 채점한 경험에 있던 말씀을 드리겠습니다.

제가 d로 큰 사이즈의 동적 배열을 만들 때도 함수안의 지역변수로 선언하면 메모리 fault 나는 경우가 있었습니다.

대략 사이즈가 1000000크기의 int배열이었던 거같고 지금과 비슷한 상황이였습니다.

다른 큐나 유사한 자료구조도 함수안의 지역변수로 선언하면 메모리 fault가 났던 경험이 있습니다.

c나 c++와 메모리 구조가 많이 다른 것같습니다.

전역 공간도 c/c++는 상당히 크게 잡아서 배열을 선언할 수 있는데 d언어는 16M 한계로 알고 있습니다.

그래서 아주 큰 배열을 선언할 때는 저의 경우 동적배열의 참조는 전역공간에 선언하고 객체할당은

함수안에서 필요한 만큼 크게 선언했었습니다.

조금이나마 도움이 되어 드렸으면 합니다만 제 지식이 일천하여 여기까지 줄입니다.


yukariko   2년 전

@sbjwin 여러방면으로 테스트해본 결과 garbage collector를 disable하면 문제가 해결되는것을 확인했습니다.

혹시라도 같은 상황이 발생하면 이쪽으로 테스트해봐주셔도 좋을것 같습니다.

sbjwin   2년 전

네 테스트해 보겠습니다

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