문제 : PI
제출결과 :
RTE (SIGKILL: program was forcefully killed, probably memory limit exceeded)
질문 :
남은 자릿수에 따라 계산된 최소 난이도를 저장하는 방식으로 메모이제이션 적용했습니다. 따라서 메모를 위한 배열의 크기는 최대 10001 * 4 byte 까지 가능합니다. 메모리 제한이 65536kb 인데 왜 memory limit exceeded 에러가 뜨는지 모르겠어요.. 자릿수 1만으로 해서 테스트 해봤는데 제 pc에서는 메모리 제한이 따로 없어서 그런지 잘됩니다..
코드 :
importjava.util.Scanner;publicclassMain{privatestaticStringpi;//8자리 이상 10000자리 이하의 수(0으로 시작 가능)privatestaticint[]memo;publicstaticvoidmain(String[]args){Scannerin=newScanner(System.in);intc=in.nextInt();in.nextLine();//clear bufferfor(inti=0;i<c;i++){pi=in.nextLine();memo=newint[pi.length()+1];cost(pi);System.out.println(memo[pi.length()]);}in.close();}//3, 4, 5 자리씩 끊어보면서 재귀호출로 구해진 난이도의 최솟값을 memo[sub.length()] 에 저장하는 함수 publicstaticintcost(Stringsub){intmin=Integer.MAX_VALUE;intcost,tmp;if(sub.length()==0)return0;if(sub.length()<3)return11;if(memo[sub.length()]!=0){returnmemo[sub.length()];}for(inti=3;i<=5;i++){if(i>sub.length())returnmin;cost=check(sub.substring(0,i));tmp=cost(sub.substring(i,sub.length()));if(cost+tmp<min){min=cost+tmp;}}returnmemo[sub.length()]=min;}//주어진 sub의 난이도를 계산하는 함수publicstaticintcheck(Stringsub){int[]d=newint[sub.length()-1];booleanhard=false;for(inti=0;i<sub.length()-1;i++){d[i]=sub.charAt(i+1)-sub.charAt(i);}intprev=d[0];for(inti=1;i<d.length;i++){if(prev!=d[i]&&prev!=-d[i]){hard=true;break;}prev=d[i];}if(!hard){if(d[0]==0)return1;elseif(d[0]==-d[1])return4;elseif(prev==1||prev==-1)return2;elsereturn5;}elsereturn10;}}
danwoo21
문제 : PI
제출결과 :
RTE (SIGKILL: program was forcefully killed, probably memory limit exceeded)
질문 :
남은 자릿수에 따라 계산된 최소 난이도를 저장하는 방식으로 메모이제이션 적용했습니다. 따라서 메모를 위한 배열의 크기는 최대 10001 * 4 byte 까지 가능합니다. 메모리 제한이 65536kb 인데 왜 memory limit exceeded 에러가 뜨는지 모르겠어요.. 자릿수 1만으로 해서 테스트 해봤는데 제 pc에서는 메모리 제한이 따로 없어서 그런지 잘됩니다..
코드 :
9년 전