shfshfdl   2년 전

#define max(a, b) ((a) >= (b)) ? (a) : (b)


int max2(int a, int b)    {
    return ((a) >= (b)) ? (a) : (b);
}


이렇게 두가지로 구현했는데 max2를 하면 정답이 나오고  max를 사용하면 잘못된결과를 도출합니다.

        dp[i][2] = max(dp[i - 2][1], dp[i - 2][2]) + stairs[i];

문제되는 부분이 이부분인데..

max(30, 0) + 25 가 30이라는 말도 안되는 결과가 나오는데

어떤 부분이 문제일까요?


도움부탁드리겠습니다.

ho94949   2년 전

max함수를 define에서 정의한 대로 풀어 써보세요. 그러면 답이 나올 것이고 매크로 함수가 안좋다는걸 느끼시면 됩니다.

onjo0127   2년 전

매크로 쓴 저 부분을 그대로 치환해보면

((30) >= (0)) ? (30) : (0) + 25

이 되는데, 이걸 말로 풀어 쓰면 30이 0보다 같거나 크다면 30이 결과값이 되고, 아니면 0 + 25이 결과값이 된다는 말입니다.

매크로에 괄호를 전체적으로 한 번 더 씌워 주시면 될 것 같습니다.

댓글을 작성하려면 로그인해야 합니다.