java RTE 에 대해서 질문드립니다.

  • overaction00
    overaction00

    책을보면서 공부중입니다.

    답안을 제출하면 RTE 에러가 발생합니다.

    아래의 코드 중 어느 부분이 잘못됬을까요?

    ㅠㅜ 도움 부탁드립니다.

    문제는 WILDCARD 입니다.

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    import java.util.Scanner;
    
    public class Main {
        public static final int MAX = 100;
    
        private static char[] W;
        private static char[] S;
        private static int[][] cache = new int[MAX + 1][MAX + 1];
    
        static boolean matchMemoized(int w, int s) {
            if (cache[w][s] == 0) {
                return false;
            } else if (cache[w][s] == 1) {
                return true;
            }
    
            if (w < W.length && s < S.length && (W[w] == '?' || W[w] == S[s])) {
                cache[w][s] = 1;
                return matchMemoized(w+1, s+1);
            }
    
            if (w == W.length) {
                return s == S.length;
            }
    
            if (W[w] == '*') {
                if (matchMemoized(w+1, s) || (s < S.length && matchMemoized(w, s+1))) {
                    return true;
                }
                cache[w + 1][s] = 0;
                cache[w][s + 1] = 0;
            }
    
            return false;   
        }
    
        public static void main(String[] args) {
    
            Scanner sc = new Scanner(System.in);
            String cases = sc.nextLine();
            int T = Integer.parseInt(cases);
            while(T > 0) {
                String pattern = sc.nextLine();
                List<String> list = new ArrayList<String>(MAX);
                int noString = Integer.parseInt(sc.nextLine());
                for (int i = 0; i < noString; i++) {
                    String s = sc.nextLine();
    
                    W = pattern.toCharArray();
                    S = s.toCharArray();
                    for ( int x = 0; x < MAX + 1; x++) {
                        for ( int y = 0; y < MAX + 1; y++) {
                            cache[x][y] = -1;
                        }
                    }
    
                    if (matchMemoized(0, 0)) {
                        list.add(s);
                    }
                }
                Collections.sort(list);
                for (String s : list) {
                    System.out.println(s);
                }
                T--;
            }
        }
    }
    

    10년 전
2개의 댓글이 있습니다.
  • hyunhwan
    hyunhwan
            if (W[w] == '*') {
                if (matchMemoized(w+1, s) || (s < S.length && matchMemoized(w, s+1))) {
                    return true;
                }
                cache[w + 1][s] = 0;
                cache[w][s + 1] = 0;
            }
    

    위의 코드에서 (29~24번째 줄)

    cache[w][s + 1] = 0;
    

    이부분 에서 s+1 에 대해 처리를 할 때 index를 벗어나는 경우가 발생할 수 있을 것 같다는 생각이 듭니다.


    10년 전 link
  • overaction00
    overaction00

    바운더리체크를 잘못하고 있었네요. ㅠㅜ
    조언 감사합니다.


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