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