2579번 - 계단 오르기
#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이라는 말도 안되는 결과가 나오는데
어떤 부분이 문제일까요?
도움부탁드리겠습니다.
max함수를 define에서 정의한 대로 풀어 써보세요. 그러면 답이 나올 것이고 매크로 함수가 안좋다는걸 느끼시면 됩니다.
매크로 쓴 저 부분을 그대로 치환해보면
((30) >= (0)) ? (30) : (0) + 25
이 되는데, 이걸 말로 풀어 쓰면 30이 0보다 같거나 크다면 30이 결과값이 되고, 아니면 0 + 25이 결과값이 된다는 말입니다.
매크로에 괄호를 전체적으로 한 번 더 씌워 주시면 될 것 같습니다.
댓글을 작성하려면 로그인해야 합니다.
shfshfdl 5년 전 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이라는 말도 안되는 결과가 나오는데
어떤 부분이 문제일까요?
도움부탁드리겠습니다.