skatjdehddms   2년 전

병합정렬을 이용했고 중복제거는 이중 for문을 이용해서 입력할때 미리 제거를 했습니다 예제는 잘 나오고 여러가지 질문에 있던 예시들도 잘 나옵니다 그런데 자꾸 제출을 하면 초반에 메모리 초과가 납니다 혹시나 무한반복이 문제인가 싶어 제가 아는 선에서는 무한 반복이 생기지 않게 수정했는데도 안됩니다 2일째 골머리를 앓고있습니다 제발 부탁드립니다

djm03178   2년 전

중복 체크의 로직이 잘못되었습니다.

현재 코드는 새로운 문자열이 입력되면 이전까지 문자열들 중 중복이 아닌 것이 나올 때마다 init을 하게 됩니다. 물론 결과적으로는 하나만 저장이 되겠지만, init에서 호출하는 new로 할당된 메모리 자체는 계속해서 누적되게 됩니다. 중복되지 않는 경우 init을 한 번만 수행하도록 해야 합니다.

또한 new를 할 때 할당되어야 하는 메모리는 strlen(arr)보다 1 이상 더 커야 합니다. 널 문자가 들어갈 자리가 필요하기 때문입니다.

dustkd1004   2년 전

중복제거를 정렬 후에 해보시는 건 어떠신가요? 

정렬 알고리즘이 올바르면 중복된 원소들은 붙어있기 때문에 쉽게 제거 가능합니다.

그리고 STL은 의도적으로 안쓰시는 건가요? 

C++ 쓰시는 거면 sort는 STL 사용하는 걸 추천드립니다.

djm03178   2년 전

또한 이 코드는 중복 체크의 로직이 다소 비효율적이라, 아마도 데이터 추가를 통해 저격이 가능할 것으로 보입니다.

skatjdehddms   2년 전

문제였던 메모리 초과는 해결됐는데 이제는 시간초과가 걸리네요 기존보단 많이 진행이 된걸 보니 개선은 된거같은데 아직도 기준에 못 미치나 봅니다 여기서 어떻게 더 시간을 줄여야할지 모르겠습니다.

skatjdehddms   2년 전

클래스를 통해서 모든걸 해보려 해봤는데 불필요한 움직임이 너무 많은거같아서 걍 다 지워버리고 string로 해봤는데 그게 정답이었습니다 바보같은 고집을 속죄하는 마음  뿐입니다

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