BOGGLE 문제 푸는데 RTE가 나옵니다.

  • sdrlurker
    sdrlurker

    local에서 예시와 나온 것과 똑같이 입력하면 답이 맞게 나오는데
    여기서 문제를 제출하니 런타임 오류 RTE가 나옵니다. ㅠㅠ;
    그 이유를 알고 싶습니다.

    import java.util.Scanner;
    
    public class Main {
        static int location;
        private static int answer2(char[][] pans, String input, int x, int y)
        {
            int ret = 0;
            //System.out.println("x=" + x +", y=" + y + ", location=" + location);
            if(location<input.length()-1 && pans[y][x] == input.charAt(location+1))
            {
                ++location;
                //System.out.println(input.charAt(location));
                if(x>0 && y>0)  ret = answer2(pans,input,x-1,y-1);
                if(x<pans.length-1 && y>0)  ret = answer2(pans,input,x+1,y-1);
                if(x<pans.length-1 && y<pans[x].length-1)   ret = answer2(pans,input,x+1,y+1);
                if(x>0 && y<pans[x].length) ret = answer2(pans,input,x-1,y+1);
                if(x>0)     ret = answer2(pans,input,x-1,y);
                if(x<pans.length-1)     ret = answer2(pans,input,x+1,y);
                if(y>0)     ret = answer2(pans,input,x,y-1);
                if(y<pans[x].length-1)      ret = answer2(pans,input,x,y+1);
            }
            return location;
        }
    
        private static int answer(char[][] pans, String input)
        {
            int ret = -1;
            location = 0;
    
            for(int y=0;y<pans.length;y++)
            {
                for(int x=0;x<pans[y].length;x++)
                {
                    if(pans[y][x] == input.charAt(0))
                    {
                        //System.out.println(pans.length + " " + pans[x].length);
                        if(x>0 && y>0)  ret = answer2(pans,input,x-1,y-1);
                        if(ret == input.length()-1) return ret;
                        location = 0;
                        if(x<pans.length-1 && y>0)  ret = answer2(pans,input,x+1,y-1);
                        if(ret == input.length()-1) return ret;
                        location = 0;
                        if(x<pans.length-1 && y<pans[x].length-1)   ret = answer2(pans,input,x+1,y+1);
                        if(ret == input.length()-1) return ret;
                        location = 0;
                        if(x>0 && y<pans[x].length-1)   ret = answer2(pans,input,x-1,y+1);
                        if(ret == input.length()-1) return ret;
                        location = 0;
                        if(x>0)     ret = answer2(pans,input,x-1,y);
                        if(ret == input.length()-1) return ret;
                        location = 0;
                        if(x<pans.length-1)     ret = answer2(pans,input,x+1,y);
                        if(ret == input.length()-1) return ret;
                        location = 0;
                        if(y>0)     ret = answer2(pans,input,x,y-1);
                        if(ret == input.length()-1) return ret;
                        location = 0;
                        if(y<pans[x].length-1)      ret = answer2(pans,input,x,y+1);
                        if(ret == input.length()-1) return ret;
                        location = 0;
                    }
                }
            }
            return ret;
        }
    
        public static void main(String args[])
        {
            Scanner sc = new Scanner(System.in);
                int cases = sc.nextInt();
            for(int num=0;num<cases;num++)
            {
                String lsStr[] = new String[5];
                for(int i=0;i<5;i++)
                    lsStr[i] = sc.next();
    
                char pans[][] = new char[5][];
    
                for(int i=0;i<lsStr.length;i++)
                {
                    pans[i] = lsStr[i].toCharArray();
                }
    
                int words = sc.nextInt();
                String inputs[] = new String[words];
                for(int i=0;i<inputs.length;i++)
                    inputs[i] = sc.next();
    
                for(int i=0;i<inputs.length;i++)
                {
                    if(answer(pans, inputs[i])==inputs[i].length()-1)
                        System.out.println(inputs[i] + " YES");
                    else
                        System.out.println(inputs[i] + " NO");
                }
    
            }
        }
    }
    


    11년 전
2개의 댓글이 있습니다.
  • kws4679
    kws4679

    어떤 RTE 인지 모르겠지만...아마도 메모리 액세스 문제인경우가 많겠지만요.. 제경우에는 xcode 로 짰는데 잘되었다가 g++ 로 짜면 메모리 액세스 문제가 나는경우도 있었습니다. 혹시 이클립스같은 툴을 쓰신다면 한번 콘솔로 해보심이...


    11년 전 link
  • JongMan
    JongMan

    커다란 입력을 여러개 생성해서 넣어보세요~


    11년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.