paraworld   3년 전

a와 b중 아무거나 하나 잡아서 a * b까지의 a의 배수를 dictionary(해시)에 넣은 다음

a * b까지의 b의 배수를 확인하면서 key값이 충돌하는 첫번째 부분을

최소공배수로 반환하는 식으로 짰습니다. 그런데 메모리 초과라고 하네요.

dictionary 개수의 최악의 경우가 45000 * 2 = 9만개, 테스트 케이스마다 dictionary를 초기화시킵니다.

제 머리로는 메모리 초과가 뜨는 이유를 모르겠습니다. 알려주시면 감사하겠습니다.

======================================================

https://usroom.tistory.com/entry/%ED%9A%A8%EA%B3%BC%EC%A0%81%EC%9D%B8-C-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B4%80%EB%A6%AC-%EA%B8%B0%EB%B2%95

해결했습니다.

매 루프마다 new로 dictionary를 찍어내는게 문제였습니다.

900개짜리 데이터를 만들어 넣어본 결과입니다. 노란색이 GC입니다.

new를 루프마다 떡칠한거

preview

밖으로 빼고 Clear()를 돌린거

preview

zzzz465   3년 전

numbers = new Dictionary<int, bool>()을 매 루프마다 해주는데

이전 딕셔너리가 GC되지 않은거 아닐까요, numbers.Clear()를 사용해보세요

paraworld   3년 전

https://www.acmicpc.net/source/19669050

그거 추가해도 메모리 초과가 뜹니다..

paraworld   3년 전

해결했습니다. GC 문제였네요.

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