매크로 함수는 단순치환입니다.
#define max(a,b) a>b? a:b을
arr[i][0] = max(arr[i - 2][0], arr[i - 2][1]) + stairs[i];에다가 치환하면
arr[i][0] = arr[i - 2][0] > arr[i - 2][1] ? arr[i - 2][0] : arr[i - 2][1] + stairs[i];
삼항 연산자의 범위가 stairs[i]까지 포함되었습니다. arr[i - 2][0] > arr[i - 2][1]가 true이면 stairs[i]는 더해지지 않겠죠.
반면에 말씀하신 괄호를 넣은 예는
arr[i][0] = (max(arr[i - 2][0], arr[i - 2][1])) + stairs[i];는
arr[i][0] = (arr[i - 2][0] > arr[i - 2][1] ? arr[i - 2][0] : arr[i - 2][1]) + stairs[i];
가 됩니다. 앞쪽의 삼항 연산자가 어찌됐든 stairs[i]는 무조건 더하게 되죠.
이런 문제점이 생길 수 있어 매크로 함수를 정의하실 때는 아래처럼 괄호로 최대한 묶는 것이 좋습니다.
#define max(a,b) ((a) > (b) ? (a):(b))
conjurer000 7년 전
int stairs[303]; // 각 계단의 점수
int arr[303][2]; // arr[i][0] : 전 계단을 밟지 않고 이 계단을 밟았을 때 최고점
// arr[i][1] : 전 계단을 밟고 이 계단을 밟았을 때 최고점
int max(int a, int b)
{
return a > b ? a : b;
}
//#define max(a,b) a>b? a:b
출력부분에 if문을 사용하지 않고 max함수를 통해 출력값을 결정했습니다.
int max() 함수로 풀면 문제 풀리는데
#define max(a,b)로 만든 매크로 함수는 오류가 나네요.
arr[i][0] = max(arr[i - 2][0], arr[i - 2][1]) + stairs[i]; 이 부분에서
arr[5][0]이 75가 되어야 하는데 55로 나옵니다.
이 부분에서 +stairs[i]가 작동을 안하는 것 같습니다.
그런데
arr[i][0] = (max(arr[i - 2][0], arr[i - 2][1])) + stairs[i];
이렇게 매크로함수 이용 부분에 괄호를 넣으면 제대로 작동합니다.
매크로 함수는 단독으로만 써야 하는 건가요?