인프런 커뮤니티 질문&답변

석종엽님의 프로필 이미지
석종엽

작성한 질문수

IT 기업 취업을 위한: 코딩테스트 혼자서 정복하기 (C/C++)

동전문제 구현

혹시 이건 왜 안되는지 말씀해주실 수 있나요??

해결된 질문

작성

·

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번째부터 시작하기 때문에 처음 다섯 개의 값은 출력하지 않는 것이 더 명확할 것 같습니다.

이러한 수정이 완료되면 코드가 원하시는 대로 동작할 것입니다. 답변이 도움이 되었길 바랍니다.

석종엽님의 프로필 이미지
석종엽

작성한 질문수

질문하기