JUMPGAME문제에서 경로의 수를 세어서(||대신 +) 0보다 크면 YES를 하면 왜 안되는지 모르겠습니다

  • object1997
    object1997

    return ret= (f(row + jumpsize, col) + f(row, col + jumpsize));
    이런식으로 ||대신 +로 경로를 세어서,

    main에서 0보다 크면 YES를 하고, 아니면 NO를 프린트 했는데 왜 이렇게 하면 틀렸습니다가 뜨는지 이해되지 않습니다.

    #include가 잘 뜨지 않아서 생략했습니다.
    stidio.h, stdlib.h, string.h #pragma warning (disable:4996)를 사용했습니다

    int n;
    int a[100][100];
    int cache[100][100];
    int f(int row, int col);
    int main() {
    freopen("a.inp", "r", stdin);
    freopen("a.out", "w", stdout);

    int how;
    scanf("%d", &how);
    
    for (int e = 0; e < how; e++) {
    
        scanf("%d", &n);
        for (int i = 0; i < n; i++) {
            memset(cache[i], -1, sizeof(cache[0]));
        }
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                scanf("%d", &a[i][j]);
            }
        }
    
        int result = f(0, 0);
        if (result >0) printf("YES\n");
        else printf("NO\n");
    }
    fclose(stdin);
    fclose(stdout);

    }

    int f(int row, int col) {
    if (row > n - 1 || col > n - 1) return 0;
    if (row == n - 1 && col == n - 1) return 1;
    int& ret = cache[row][col];
    if (ret != -1) return ret;
    int jumpsize = a[row][col];
    return ret= (f(row + jumpsize, col) + f(row, col + jumpsize));
    }


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