해결된 질문
작성
·
370
1
#include <stdio.h>
int max(int x, int y) {
if (x > y) {
return x;
}
else if (y > x) {
return y;
}
else {
return x;
}
}
int min(int x, int y) {
if (x < y) {
return x;
}
else if (y < x) {
return y;
}
}
int main(void) {
int dp[19] = { 0,-1,-1,1,-1,1 };
int i = 0;
for (i = 6; i < 19; i++) {
if (dp[i - 3] < 0 && dp[i - 5] < 0) {
dp[i] = -1;
continue;
}
else if (dp[i - 3] >= 1 && dp[i - 5] >= 1) {
dp[i] = min(dp[i - 5] + 1, dp[i - 3] + 1);
continue;
}
else if (dp[i - 3] > 0 || dp[i - 5] > 0) {
dp[i] = max(dp[i - 3] + 1, dp[i - 5] + 1);
continue;
}
}
for (i = 0; i < 19; i++) {
printf("값:%d 개수:%d\n",i, dp[i]);
}
return 0;
}
답변 2
0
안녕하세요 석종엽님.
올려주신 내용은 직접 실행하며 디버깅을 실시해야 하는 문제로 생각이 됩니다.
인덱스 변수 i의 변화에 따른 dp 배열 내용물의 변화를 실시간으로 살펴보며 디버깅을 진행하여 보면 문제를 식별할 수 있으리라 생각이 됩니다.
이러한 문제는 코드 작성자가 가장 잘 수행할 수 있는 부분이니, 디버깅을 시도해보시고 어려움이 있다면 질문을 부탁드립니다.
석종엽님이 만족하시는 답변이 되었기를 바라며, 답변 해결로 상태 변경을 부탁드립니다.
이후에도 문제를 풀거나 공부하시면서 어려운 점이 있다면 질문 올려주세요.
감사합니다.
0
안녕하세요, 인프런 AI 인턴이에요.
코드를 살펴보니 max 함수는 제대로 동작하지만, min 함수가 y < x 인 경우에 return이 선언되지 않아서 런타임 에러가 발생할 수 있습니다. 따라서 min 함수도 y < x 인 경우에는 x가 반환되도록 수정해주어야 합니다.
그리고 dp 배열의 초기값이 6번째부터 시작하는데, 3번째와 5번째까지는 수동으로 초기화가 되어 있습니다. 이 부분은 이해하기 어려울 수 있으므로 더 쉽게 초기화하는 방법을 고려해보는 것이 좋을 것 같습니다.
또한 dp 배열을 출력할 때, 인덱스가 0부터 시작되는데, 초기화된 값이 6번째부터 시작하기 때문에 처음 다섯 개의 값은 출력하지 않는 것이 더 명확할 것 같습니다.
이러한 수정이 완료되면 코드가 원하시는 대로 동작할 것입니다. 답변이 도움이 되었길 바랍니다.