znfma1   2년 전

단계별에 문제를 풀어보던 도중에 풀어보게 된 문제인데요, 메모리 초과가 나서 실패를 하였습니다. 

메모리를 줄일 수 있는 방안은 어떤 것이 있을까요?

fccva   2년 전

min이 매우 클 수 있습니다.

매우 많은 반복문 안에서 set을 계속 새로 만들면 메모리를 계속 할당해줘야합니다.

그래서 set = new HashSet<>(); 대신 set.clear()를 사용해봤는데, 역시 메모리 초과가 납니다.

제 생각엔 clear()를 했지만 Integer가 메모리에서 내려가지 않아서 그런 것 같습니다. (확실하진 않습니다.)

그래서 set.clear()할 때 마다 System.gc();로 가비지 컬렉터를 호출해줬더니 메모리 초과는 탈출했네요. (gc 호출 시간 때문일지도 모르겠습니다.)

시간 초과가 나오긴 했지만 어쨌든 위의 이유로 메모리 초과가 난 것 같습니다. 

시간초과야 앞서 말했듯 min이 매우 커질 수 있기 때문에 나타나는 것이고요..

시간제한이 1초인데 min이 가능한 값은 10억이니까, Java 채점 추가 시간을 받아도 부족합니다.

보통 C/C++ 기준 1초에 1억번 연산 정도로 계산합니다. Java는 채점 추가시간을 두 배 하고 1초 더 받고요.

이 문제는 최대공약수를 이용해서 풀이하면 됩니다.

znfma1   2년 전

감사합니다!

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