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;
}
개발자로서 성장하는 데 큰 도움이 된 글이었습니다. 감사합니다.