tlsehdrl4340   1년 전

코드는 아래와 같습니다. 메모리 초과가 뜨는데 어디서 메모리가 초과된 것인지 알 수가 없어 질문 드립니다.

logicdrive   1년 전

21 ~ 27번째 줄을 보시면 for문 안에서 문자열을 .toUpperCase()을 이용해서 대문자로 변경시킨뒤, charaAt()으로 참조하고 있습니다.

대문자로 변경시킨 문자열은 더이상 참조되지 않으므로, 가비지 컬렉터에 들어가게 되는데 for문이 (주어진 단어의 길이)^2 = 1,000,000^2 = 1조번정도 반복되므로 가비지 컬렉터에 변환시킨 문자열들이 계속 쌓여서 메모리 초과가 나는 것 같습니다.

* 제안 사항들

1. word에 참조할때마다 .toUpperCase()를 사용하지 말고, 15번째 줄에서 a.readLine().toUpperCase()로 미리 대문자로 변환해두면 메모리를 사용하지 않을 수 있습니다.

2. 메모리 초과를 해결해도 반복횟수가 1조번이 넘기때문에 시간초과를 받습니다. word를 제곱으로 순환하지 말고, 대문자 알파벳 개수만큼만 반복해도 충분히 구할 수 있습니다.

tlsehdrl4340   1년 전

알파벳 개수 만큼 반복은 몇번째 줄을 수정해야 되나요?

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