c언어/백준 1149
2022. 2. 4. 14:03ㆍ문제풀이/백준
이 문제는 보기 쉽게 조건을 적어줬기 때문에 간단하게 풀었다.
*빨간색* N번 집으로 끝나는 최솟값은 오른쪽 표중 작은 것 | *초록색* N-1번 집의 최솟값 + *빨간색* N번 집 |
*파란색* N-1번 집의 최솟값 + *빨간색* N번 집 |
dp[N][0] = MIN(dp[N - 1][1] + arr[N][0], dp[N - 1][2] + arr[N][0]); // 0은 빨강
// 1은 초록
// 2는 파랑
빨간색으로 끝나는 N번집의 최솟값을 구했다면, 파랑색으로 끝나는 집과 초록색으로 끝나는 집의 최솟값을 구한뒤에 서로 비교하면 된다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<stdlib.h>
int MIN(int a, int b) {
return (a < b) ? a : b;
}
int main() {
int arr[1001][3] = { 0, };
int dp[1001][3] = { 0, };
int n;
int result;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < 3; j++) {
scanf("%d", &arr[i][j]);
}
}
dp[0][0] = arr[0][0];
dp[0][1] = arr[0][1];
dp[0][2] = arr[0][2];
for (int k = 1; k < n; k++) {
dp[k][0] = MIN(dp[k - 1][1] + arr[k][0], dp[k - 1][2] + arr[k][0]);
dp[k][1] = MIN(dp[k - 1][0] + arr[k][1], dp[k - 1][2] + arr[k][1]);
dp[k][2] = MIN(dp[k - 1][0] + arr[k][2], dp[k - 1][1] + arr[k][2]);
}
result = MIN(dp[n - 1][0], MIN(dp[n - 1][1], dp[n - 1][2]));
printf("%d", result);
}
*의문점 : #define MIN(a,b) (a < b) ? a : b
MIN을 함수로 쓰지 않고 define해서 컴파일을 해보니
'warning C4804: '<': 연산에 'bool' 형식을 사용하는 것은 안전하지 않습니다.'
라는 문구가 나왔는데, 함수 선언과의 차이점을 설명해주실 수 있다면 댓글로 달아주시기 바랍니다.
'문제풀이 > 백준' 카테고리의 다른 글
c언어/백준 11053 (0) | 2022.02.06 |
---|