gkfkagkfka12   6년 전

메모리제한은 128MB인데 저는 string 2차원 배열과 int 2차원 배열로 처음에 해결했습니다.

sizeof 연산자를 사용해보니 string class가 28byte더군요.

그럼 std::string dp[1001][1001] = 28*1001*1001 = 28,056,028byte로 약 28MB입니다.

또 int dp2[1001][1001] = 4*1001*1001 = 4,008,004로 약 4MB입니다.

그러면 그 외에 여러가지 고려한다 쳐도 40MB 안쪽일텐데... 왜 메모리 초과가 날까요?

djm03178   6년 전

sizeof로는 객체 내부에서 동적할당된 메모리 등의 추적이 불가능합니다. 따라서 문자열의 내용물은 계산이 전혀 되지 못합니다.

yukariko   6년 전

sizeof 연산자로는 동적할당된 메모리의 크기를 알 수 없습니다.

따라서 string class는 28byte + 동적할당 까지 메모리에 계산해야 합니다.


gkfkagkfka12   6년 전

두분 모두 감사합니다.

그러면 혹시 다른방법으로 해결하는 힌트 주실 수 있나요? 1차원 배열을 사용해야 할까요?

djm03178   6년 전

코드를 공개해놓으시긴 했지만, 앞으로는 질문을 올릴 때 코드도 같이 올려주시기 바랍니다.

아마 https://www.acmicpc.net/source...이 코드를 말씀하시는 것 같군요.

코드의 로직으로 봐서는, dp 배열에 그 때까지의 LCS를 전부 저장해두고 가는 식으로 하신 것 같은데, 이렇게 할 경우 최대 O(N^3)의 메모리를 요구하게 됩니다. 이렇게 중간 문자열을 저장해두지 말고, dp2를 모두 계산한 후에 경로를 추적해서 LCS를 구성하시면 됩니다.

gkfkagkfka12   6년 전

넵 이제 코드도 올리도록 하겠습니다. 감사합니다.

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