iubns   5년 전

C# 으로 코딩 하였습니다.

메모리를 초과하였다고 나오는데

C# 이기 때문에 메모리 해제 문제는 아닐꺼 같고 과도하게 많은 메모리를 사용하여 발생하는 문제라 생각이 되는데

여기서  일반 변수들은 다 합해야 1M 도 안나올꺼 같고 유일하게 의심되는 부분이 배열인데

문제에서 시험장의 최대의 개수가 1백만개라 하였는데 그렇다면 배열의 최대 크기는 32 bit * 1000000 인 32MB 아닌가요?

메모리 제한이 512MB 이므로 메모리 초과 문제는 발생하지 않아야 하는것 아닌가요?

jwvg0425   5년 전

Split함수는 매번 호출될 때마다 그 결과를 새로운 배열로 다시 할당합니다.  이 경우 for 문에서 Split 함수를 매번 다시 호출하고 있기 때문에, 최악의 경우 반복문의 매 스텝마다 100만개짜리 배열이 다시 생성이 될 것이고, 그게 누적이 돼서 메모리 초과가 발생하는 것 같습니다.

+ 메모리 초과가 아니더라도, Split 함수를 매번 다시 호출하는 건 결과적으로 시간 복잡도가 O(N^2)이 되기 때문에, 시간 상으로도 통과할 수 없는 방법입니다.

코드를 아래와 같이 수정하면 정상적으로 통과됩니다.

iubns   5년 전

Split함수에 대한 이해도가 부족했었군요.

감사합니다. 덕분에 많은걸 배워 가네요

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