shaiya1   10달 전

수 정렬하기 1 , 2 까지는 뭐 퀵정렬 및 병합정렬로 쉽게 풀었는데요 3 은 범위가 천만까진데..

런타임 에러가 자꾸 뜨네요.. 메모리 공간 부족이라서 그런거 같은데... 동적할당 사용했으며 free 도 적절하게 사용했습니다만..

메모리관리만 잘하면 퀵정렬 및 병합정렬로 해당 문제를 풀 수 있나요? 아니면 또 다른 정렬 알고리즘을 사

namnamseo   10달 전

천만 이상의 가장 작은 2의 거듭제곱은 16777216이죠. 병합 정렬을 사용하면 그의 두 배인 33554432개의 int가 필요하긴 합니다.
그런데 그건 int 배열 6000x6000 잡은 것보다 작기 때문에, 메모리 부족의 문제는 아닌 것 같습니다. 작동 문제인 것 같네요.
가장 흔한 것으로는 배열 인덱스 참조 오류거나, 무한 루프 혹은 무한 재귀인 것 같습니다.

exupery   10달 전

1. 이 문제를 포함한 대부분의 문제의 경우 동적할당은 필요 없거나 안써도 됩니다. (편의/시간 등 여러 이유로)

2. 정렬의 경우에도 직접구현하시는 것보다 C++의 STL sort를 쓰는게 여러모로 좋습니다. (C로 제출하셨는데 C++로 하는게 더 좋을 것 같아요)

3. 사용가능한 메모리가 8MB이고, 문제 입력은 천만개의 숫자입니다. 숫자 하나가 1바이트라고 해도 이미 메모리 초과입니다. 입력 숫자가 1만 이하의 자연수라는 점이 힌트입니다.

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