dasd412   4년 전

질문드리기 앞서 왜 메모리 초과가 나는지는 인지하고 있음을 말씀드립니다...

 왜냐하면 어레이 리스트의 인덱스가 최대 2^999까지 담을 수 없기 때문이죠.

일단, 제 풀이를 먼저 설명드리겠습니다.

  1. Painting이란 객체를 만든다. property는 parent(이전에 선택하였던 수의 값), sum(현재 합=이전 합+현재 선택한 수)
  2. 그리디 알고리즘으로는 풀 수없기 때문에 모든 경우의 수를 봐야한다고 생각했습니다. 그래서 착안한 것이 complete binary tree 이용입니다.

이전 색깔을 제외한 다른 두 색깔을 '선택'하는 것이기 때문에 complete binary tree형태의 의사 결정 트리 모양과 같다는 것을 생각해냈기 때문입니다.

결론적으로 보면, 의사 결정 트리의 가장 마지막 레벨(트리의 깊이)에서 최솟값이 최소비용임을 알 수 있습니다. 

3.제 나름대로 메모리를 줄일려고 노력한 것은 ArrayList 2개 parent와 child를 교대로 쓴 것입니다. 기존 parent값은 필요가 없기 때문에 parent에 기존 child

를 넣고 child는 비워넣는 것 입니다.

@제가 생각한 방법의 문제는 자명합니다. 3을 쓴다고 하더라도 입력크기가 최악의경우 1000인데, 이러면 가장 마지막 레벨의  

요소 개수는 2^1000/2=2^999이기 때문에 터지는 것이죠.


어떻게 하면 더욱 효율적으로 풀 수 있을까요?? 답변자분들의 도움 부탁드립니다. 

nahwasa   4년 전

풀이를 보니 저보다 고수신것같아 힌트만 올리고 가옵니다.

일단 올려두신 풀이가 이해가 되지 않아 글쓴이님의 풀이방식에서 더 효율적으로 풀 방법은 잘 모르겠습니다.

다만 너무 어렵게 생각하신게 아닌가 싶습니다.

전 N과 관계없이, 연산을 위한 추가 메모리로 int 3개만 사용했습니다.

dasd412   4년 전

답변 감사합니다. :)

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