BOARDCOVER 문제 런타임오류.

  • ndw
    ndw

    로컬에서 돌렸을 때 Sample case는 이상없이 작동하였습니다.
    하지만 사이트에서 제출하였을 때 런타임 오류가 바로 뜹니다..

    import java.util.Scanner;

    public class BOARDCOVER {

    static int row;
    static int yol;
    static char[][] matrix;
    static int dot_count;
    static int value;
    static int [] real_value;
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner a = new Scanner(System.in);
        int test_case;
        int x1 = 0, y1 = 0;
        test_case = a.nextInt();
        real_value=new int [test_case];
        for (int i = 0; i < test_case; i++) {
            row = a.nextInt();
            yol = a.nextInt();
            matrix = new char[row][yol];
    
            for (int k = 0; k < row; k++) {
                String line = a.next();
                int z = 0;
                for (int h = 0; h < yol; h++) {
                    if (z < yol) {
                        matrix[k][h] = line.charAt(z);
                        z++;
                    }
    
                }
            }
    
            for (int j = 0; j < row; j++) {
                for (int k = 0; k < yol; k++) {
                    if (matrix[j][k] == '.') {
                        dot_count++;
                    }
                }
            }
    
            real_value[i]=find_count(dot_count,row,yol);
            value=0;
            dot_count=0;
        }
        for(int ab=0;ab<test_case;ab++){
            System.out.println(real_value[ab]);
        }
    
    }
    
    public static int find_count(int d_c,int r,int y) {
        int x1 = -1, y1 = -1;
        if (d_c % 3 != 0) {
            return value;
        }
        if(d_c>50){
            return value;
        }
        if(r>20 || y>20 || r<1 || y<1 ){
            return value;
        }
        if (d_c == 0) {
            value = value + 1;
            return value;
        }
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < yol; j++) {
                if (matrix[i][j] == '.') {
                    x1 = i;
                    y1 = j;
                    break;
                }
            }
            if (x1 != -1)
                break;
        }
    
        if(matrix[x1][y1+1]=='.' && matrix[x1+1][y1]=='.'){
            matrix[x1][y1]='#';
            matrix[x1][y1+1]='#';
            matrix[x1+1][y1]='#';
            d_c=d_c-3;
            find_count(d_c,r,y);
            matrix[x1][y1]='.';
            matrix[x1][y1+1]='.';
            matrix[x1+1][y1]='.';
            d_c=d_c+3;
    
    
        }
        if(matrix[x1+1][y1]=='.' && matrix[x1+1][y1+1]=='.'){
            matrix[x1][y1]='#';
            matrix[x1+1][y1]='#';
            matrix[x1+1][y1+1]='#';
            d_c=d_c-3;
            find_count(d_c,r,y);
            matrix[x1][y1]='.';
            matrix[x1+1][y1]='.';
            matrix[x1+1][y1+1]='.';
            d_c=d_c+3;
    
    
        }
        if(matrix[x1][y1+1]=='.' && matrix[x1+1][y1+1]=='.'){
            matrix[x1][y1]='#';
            matrix[x1][y1+1]='#';
            matrix[x1+1][y1+1]='#';
            d_c=d_c-3;
            find_count(d_c,r,y);
            matrix[x1][y1]='.';
            matrix[x1][y1+1]='.';
            matrix[x1+1][y1+1]='.';
            d_c=d_c+3;
    
    
        }
        if(matrix[x1+1][y1]=='.' && matrix[x1+1][y1-1]=='.'){
            matrix[x1][y1]='#';
            matrix[x1+1][y1]='#';
            matrix[x1+1][y1-1]='#';
            d_c=d_c-3;
            find_count(d_c,r,y);
            matrix[x1][y1]='.';
            matrix[x1+1][y1]='.';
            matrix[x1+1][y1-1]='.';
            d_c=d_c+3;
    
    
        }
    
        return value;
    }

    }

    제 코드는 이러한데, 혹시 무슨 에러인지 알 수 있을까요?
    바쁘신데 읽어봐주셔서 감사드립니다


    6년 전
1개의 댓글이 있습니다.
  • seico75
    seico75
    • x1, y1 이 0~r, 0~y 의 범위를 넘어가면서 check 되는 부분이 있을 것 같습니다. x1+1, y1-1 등
    • 재귀의 깊이가 깊어지면서 에러가 날 수 있을 것 같습니다.

    결국 5 * 10 의 .만 있는 테스트 값을 넣어보면 어떨까요?


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