DECUAL에서 RTE (nonzero return code)가 발생했습니다. akcytm 문제 링크 : https://algospot.com/judge/problem/read/DECUAL 안녕하세요. DECUAL문제를 java로 풀어봤습니다. 저는 이 문제를 아래와 같은 방법으로 풀었습니다. 입력받은 String을 char배열로 변환 변환한 char배열의 원소 하나하나를 보고, 적절한 동작을 함. String보다 StringBuilder가 효율이 더 좋다고 하여, StringBuilder 사용. 문제에 있는, 예제 입력은 답을 잘 찾는데... 답안 제출을 하면 RTE(nonzero return code)가 발생하네요 -_-;; 무슨 에러가 발생했는지 확인할 방법이 없어서(에러코드를 볼 방법이 있나요?), 고생하고 있습니다. 무엇을 실수한 걸까요? 저는 Judgement 클래스의 execute 메서드의 outputA.toString().equalsIgnoreCase(outputB.toString() 이쪽 부분에서 메모리가 터진게 아닌가하고 추측하고 있습니다. import java.util.Scanner; public class Main { public static void main(String[] args) { int numOfCase = 0; String stringA = ""; String stringB = ""; Scanner scan = new Scanner(System.in); stringA = scan.nextLine(); numOfCase = Integer.parseInt(stringA); Judgement j = new Judgement(numOfCase); while(numOfCase--!=0) { stringA = scan.nextLine(); stringB = scan.nextLine(); j.execute(stringA, stringB); } for(int i = 0; i < j.b_index; i++) { if(j.barr[i]) { System.out.println("YES"); }else{ System.out.println("NO"); } } scan.close(); } } class Judgement { public boolean barr[]; public int b_index; class CarrContainer { private char carr[]; private int size; public CarrContainer() { carr = new char[1000]; size = 0; } public void saveChar(char c) { carr[size++] = c; } public void outChar(StringBuilder string) { char tmp[] = new char[size]; for(int i=0; i<size; i++) { tmp[i]=this.carr[i]; } string.append(tmp); } public void flush() { size = 0; } } public Judgement(int size) { barr = new boolean[size]; b_index = 0; } void execute(String stringA, String stringB) { CarrContainer container = new CarrContainer(); char arrA[] = stringA.toCharArray(); char arrB[] = stringB.toCharArray(); StringBuilder outputA = new StringBuilder(""); StringBuilder outputB = new StringBuilder(""); unzip(arrA, outputA, container); unzip(arrB, outputB, container); if(outputA.toString().equalsIgnoreCase(outputB.toString())) { barr[b_index++] = true; } else { barr[b_index++] = false; } } int unzip(char inpArr[], StringBuilder oupArr, CarrContainer container) { char narr[] = new char[11]; for(int x=0;x<narr.length;x++) { narr[x]=0; } int nlength = 0; boolean isBracket = false; boolean isRepeatReady = false; for(int i=0;i<inpArr.length;i++) { if(inpArr[i]=='(') { container.outChar(oupArr); container.flush(); isBracket = true; continue; } else if(inpArr[i]==')') { isBracket = false; continue; } else if(inpArr[i]=='^') { isRepeatReady = true; continue; } if(inpArr[i]>='0'&&inpArr[i]<='9') { if(isRepeatReady) { for(nlength=0;(i+nlength<inpArr.length)&&(inpArr[i+nlength]>='0'&&inpArr[i+nlength]<='9');nlength++) { if(nlength==0 && inpArr[i]!='0') { narr[0]=inpArr[i]; continue; } narr[nlength]=inpArr[i+nlength]; } i+=(nlength-1); } char tarr[] = new char[nlength]; for(int x=0; x<nlength;x++) { tarr[x] = narr[x]; } nlength=0; int numOfRepeat = Integer.parseInt(new String(tarr)); for(int x=0;x<narr.length;x++) { narr[x]=0; } for(int s=0;s<numOfRepeat;s++) { container.outChar(oupArr); } container.flush(); isRepeatReady=false; continue; } if(isBracket) { container.saveChar(inpArr[i]); continue; } else { container.saveChar(inpArr[i]); container.outChar(oupArr); container.flush(); } } return 0; } } 9년 전
2개의 댓글이 있습니다. JongMan 압축을 푼 문자열이 너무 길기 때문에 메모리 오류가 발생하지 않나 짐작해 봅니다. 이 문제는 직접 압축을 풀지 않고 해결해야 합니다. 9년 전 link akcytm 아... 답변 감사합니다. 메모리 문제일수도 있군요. 새로운 해결방법을 생각해보겠습니다. 9년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
akcytm
문제 링크 : https://algospot.com/judge/problem/read/DECUAL
안녕하세요. DECUAL문제를 java로 풀어봤습니다.
저는 이 문제를 아래와 같은 방법으로 풀었습니다.
문제에 있는, 예제 입력은 답을 잘 찾는데...
답안 제출을 하면 RTE(nonzero return code)가 발생하네요 -_-;;
무슨 에러가 발생했는지 확인할 방법이 없어서(에러코드를 볼 방법이 있나요?), 고생하고 있습니다.
무엇을 실수한 걸까요?
저는 Judgement 클래스의 execute 메서드의
outputA.toString().equalsIgnoreCase(outputB.toString()
이쪽 부분에서 메모리가 터진게 아닌가하고 추측하고 있습니다.
9년 전