#define max(a,b) a > b a : b 질문

  • vi1409
    vi1409

    TRIANGLEPATH

    #define max(a,b) a > b ? a : b
    이렇게 algorithm의 std::max를 정의 해서 사용을 해보았는데요.
    결과값이 맞지 않게 나오네요 디버깅 해서 쫒아가봤는데
    왜 cache[3][1]이 7로 들어가는지 모르겠습니다 .ㅠㅠ

    **정의하지 않고 algorithm의 max를 사용할 경우는 결과값이 맞게 나옵니다.

    #include<cstdio>
    #include<cstring>
    #define max(a,b) a > b ? a : b
    int n, triangle[100][100];
    int cache[100][100];
    int path(int y, int x){
        if (y == n - 1) return triangle[y][x];
        int& ret = cache[y][x];
        if (ret != -1) return ret;
        return ret =max(path(y + 1, x), path(y + 1, x + 1)) + triangle[y][x];
    }
    int main(){
        int testCase; scanf("%d", &testCase);
        while (testCase--){
            memset(cache, -1, sizeof(cache));
            scanf("%d", &n);
            for (int i = 0; i < n; i++)
            for (int j = 0; j <= i; j++)
                scanf("%d", &triangle[i][j]);
            printf("%d\n", path(0, 0));
        }
    }
    

    10년 전
2개의 댓글이 있습니다.
  • Toivoa
    Toivoa

    define된 구문이 풀리면서 path(y + 1, x) > path(y + 1, x + 1) ? path(y + 1, x) : path(y + 1, x + 1) + triangle[y][x] 가 될텐데,

    조건문이 거짓일 때 path(y + 1, x + 1) + triangle[y][x] 가 되고, 참일 때에는 그냥 path(y + 1, x)만 들어갈 것 같네요.

    삼항연산자 쓰실 때에는 괄호로 반드시 묶어주셔야 됩니다.


    10년 전 link
  • vi1409
    vi1409

    아 감사합니다 ㅎㅎ


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