baekjoon 1932

호진·2023년 8월 12일
0

baekjoon

목록 보기
35/37


Idea

먼저 틀린 코드

#define _CRT_SECURE_NO_WARNINGS
#define max(a, b) (a > b) ? a : b
#include <stdio.h>
#include <stdlib.h>

// acmicpc.net 1932

int arr[502][502];
int dp[502][502];

int main(void) {
	int N;

	scanf("%d", &N);

	for (int i = 0; i < N; i++) {
		for (int j = 0; j < i + 1; j++) {
			scanf("%d", &arr[i][j]);
		}
	}

	dp[0][0] = arr[0][0];
	dp[1][0] = dp[0][0] + arr[1][0];
	dp[1][1] = dp[0][0] + arr[1][1];

	for (int i = 2; i < N; i++) {
		for (int j = 0; j < i + 1; j++) {
			if (j == 0) {
				dp[i][j] = arr[i][j] + dp[i - 1][j];
			}
			else if (j == i) {
				dp[i][j] = arr[i][j] + dp[i - 1][j - 1];
			}
			else {
				if (arr[i][j] + dp[i - 1][j - 1] > arr[i][j] + dp[i - 1][j]) {
					dp[i][j] = arr[i][j] + dp[i - 1][j - 1];
				}
				else if (arr[i][j] + dp[i - 1][j - 1] < arr[i][j] + dp[i - 1][j]) {
					dp[i][j] = arr[i][j] + dp[i - 1][j];
				}
			}
		}
	}

	int result = 0;
	for (int i = 0; i < N; i++) {
		result = max(result, dp[N - 1][i]);
	}

	printf("%d", result);

	return 0;
}

삼각형의 양쪽 모서리가 아닐 경우의 조건문을 보면

if (arr[i][j] + dp[i - 1][j - 1] > arr[i][j] + dp[i - 1][j]) {
	dp[i][j] = arr[i][j] + dp[i - 1][j - 1];
}
else if (arr[i][j] + dp[i - 1][j - 1] < arr[i][j] + dp[i - 1][j]) {
	dp[i][j] = arr[i][j] + dp[i - 1][j];
}

두 경우 모두 조건문을 적어줬는데 아래 else if 를 지우고 else 로 바꾸니까 해결 됨
코드는 맞다고 생각했었고 런타임 에러도 아니었다. 이유는 모르겠고 오답노트 할 시간에 다른 문제 풀러 가야징.


Code

#define _CRT_SECURE_NO_WARNINGS
#define max(a, b) (a > b) ? a : b
#include <stdio.h>
#include <stdlib.h>

// acmicpc.net 1932

int arr[502][502];
int dp[502][502];

int main(void) {
	int N;

	scanf("%d", &N);

	for (int i = 0; i < N; i++) {
		for (int j = 0; j < i + 1; j++) {
			scanf("%d", &arr[i][j]);
		}
	}

	dp[0][0] = arr[0][0];
	dp[1][0] = dp[0][0] + arr[1][0];
	dp[1][1] = dp[0][0] + arr[1][1];

	for (int i = 2; i < N; i++) {
		for (int j = 0; j < i + 1; j++) {
			if (j == 0) {
				dp[i][j] = arr[i][j] + dp[i - 1][j];
			}
			else if (j == i) {
				dp[i][j] = arr[i][j] + dp[i - 1][j - 1];
			}
			else {
				if (arr[i][j] + dp[i - 1][j - 1] > arr[i][j] + dp[i - 1][j]) {
					dp[i][j] = arr[i][j] + dp[i - 1][j - 1];
				}
				else {
					dp[i][j] = arr[i][j] + dp[i - 1][j];
				}
			}
		}
	}

	int result = 0;
	for (int i = 0; i < N; i++) {
		result = max(result, dp[N - 1][i]);
	}

	printf("%d", result);

	return 0;
}
profile
💭(。•̀ᴗ-)✧

1개의 댓글

comment-user-thumbnail
2023년 8월 12일

개발자로서 성장하는 데 큰 도움이 된 글이었습니다. 감사합니다.

답글 달기