QUADTREE 문제, RTE (nonzero return code) 발생 원인을 모르겠습니다. shucream 안녕하세요? [[problem:QUADTREE]] 문제에서 런타입오류 RTE (nonzero return code) 가 나는데, 원인이 무엇인지 정말 모르겠습니다. 제 로직은 이렇습니다. 주어진 quadtree 압축문자열을 읽어나가면서 4분면에 대한 HashMap 형태로 저장하고 해당 4분면을 반전시킨 결과를 별개의 답안용 HashMap에 저장 x가 등장할 경우 해당 x의 위치, 즉 부모x의 key에 자신의 index를 덧붙인 string을 새로운 key로 하고, 해당 x를 구성하는 4분면의 정보(char[4])를 value 값에 저장해나가면서, 4분면정보가 다 채워지면 HashMap 에 put을 함 위 2번 후, 즉시 해당 x가 상하반전되었을 때의 결과물로서 key값이 반전된 새로운 key와, 4분면 정보인 char[4]가 반전된 새로운 4분면 결과(char[4])를, 반전quadtree 정로를 저장하는 결과HashMap에 put을 함. (예) * xbwwb -> x(bwwb) --> {("0","bwwb")} * xbwxwbbwb -> x(bwx(wbbw)b) --> {("0","bwxw"), ("03","wbbw")} * xxwwwbxwxwbbbwwxxxwwbbbwwwwbb -> x(x(wwwb)x(wx(wbbb)ww)x(x(x(wwbb)bww)wwb)b) --> {("0","xxxb"), ("00","wwwb"), ("01","wxww"),("011","wbbb"),("03","xwwb"),("030","xbww"),("0300","wwbb")} 로직을 말로 적으려니 쉬운게 아니네요ㅠ_ㅠ 혜안을 가지신 분, 일침을 가해주실 분들이 계실 거라 믿고 이렇게 도움을 요청드립니다. 아래는 소스입니다. import java.util.HashMap; import java.util.Scanner; public class Main { static int T; public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); T = Integer.parseInt(sc.nextLine()); for(int testCase = 1; testCase <= T; testCase++) { String read = sc.nextLine(); char myChar; int ixMain = 0, ixSub = 0; String ixKey = ""; // riginal quadtree의 x에 대한 정보를 가진 map HashMap<String, char[]> map = new HashMap<String, char[]>(); // original quadtree의 상하반전 결과 map HashMap<String, char[]> nMap = new HashMap<String, char[]>(); if(read.length() == 1) { // 1자리는 그냥 출력 // Answer System.out.println(read); } else { do { myChar = read.charAt(ixMain); if( myChar == 'x' ) { // x이면 if( ixKey.length() > 0 ) { char arr[] = map.get(ixKey); arr[ixSub] = myChar; } ixKey += ixSub; map.put(ixKey, new char[4]); ixSub = 0; continue; } else { char arr[] = map.get(ixKey); arr[ixSub++] = myChar; if( ixSub == 4 ) { // arr char nArr[] = new char[arr.length]; for(int i = 0; i < arr.length; i++) { nArr[reflect(i)] = arr[i]; } // key char nKey[] = ixKey.toCharArray(); for(int i = 1; i < nKey.length; i++) { nKey[i] = Character.forDigit(reflect(Character.getNumericValue(nKey[i])), 10); } // nMap 에 적재 nMap.put(String.valueOf(nKey), nArr); ixSub = Integer.parseInt(ixKey.substring(ixKey.length()-1)) + 1; ixKey = ixKey.substring(0, ixKey.length()-1); } } } while ( ++ixMain < read.length() ); // 답안작성 int index = 0; ixKey = String.valueOf(index); StringBuffer buff = new StringBuffer("x"); do { char arr[] = nMap.get(ixKey); buff.append(arr[index]); if( 'x' == arr[index] ) { ixKey += index; index = 0; } else { if(++index == 4) { if(ixKey.length() > 1) { index = Integer.parseInt(ixKey.substring(ixKey.length()-1)) + 1; ixKey = index == 4? "END" : ixKey.substring(0, ixKey.length()-1); } else { ixKey = "END"; } } } } while( ixKey != "END" ); // Answer System.out.println(buff.toString()); } } sc.close(); } /* 상하반전을 위한 변경 * 0,1,2,3 분면 -(반전)-> 2,3,0,1 */ private static int reflect(int val) { int result = 0; switch(val) { case 0: result = 2; break; case 1: result = 3; break; case 2: result = 0; break; case 3: result = 1; break; } return result; } } 10년 전
0개의 댓글이 있습니다. 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
shucream
안녕하세요?
[[problem:QUADTREE]] 문제에서 런타입오류 RTE (nonzero return code) 가 나는데,
원인이 무엇인지 정말 모르겠습니다.
제 로직은 이렇습니다.
주어진 quadtree 압축문자열을 읽어나가면서 4분면에 대한 HashMap 형태로 저장하고 해당 4분면을 반전시킨 결과를 별개의 답안용 HashMap에 저장
(예)
* xbwwb -> x(bwwb) --> {("0","bwwb")}
* xbwxwbbwb -> x(bwx(wbbw)b) --> {("0","bwxw"), ("03","wbbw")}
* xxwwwbxwxwbbbwwxxxwwbbbwwwwbb -> x(x(wwwb)x(wx(wbbb)ww)x(x(x(wwbb)bww)wwb)b)
--> {("0","xxxb"), ("00","wwwb"), ("01","wxww"),("011","wbbb"),("03","xwwb"),("030","xbww"),("0300","wwbb")}
로직을 말로 적으려니 쉬운게 아니네요ㅠ_ㅠ
혜안을 가지신 분, 일침을 가해주실 분들이 계실 거라 믿고 이렇게 도움을 요청드립니다.
아래는 소스입니다.
10년 전