[C]소스관련
글쓴이: gensomaster / 작성시간: 토, 2013/03/23 - 8:50오후
KLDP눈팅을 하다가 질문을 위해 급 가입한 뉴비입니다. (--)(__)
교수님이 내주신 문제를 풀다가 문제에 봉착하게 되어 질문을 하게되었습니다.
아래의 코드와 첨부파일에 있는 문제가 요구하는 코드가 같은일을 하는지 알려주시면 감사하겠습니다.
물론 이글에 관심을 가져 읽으러 오신분들도 감사드립니다.
#include <stdio.h> #define Number_CD 3 int main() { int n,k,i,j,A,B,R,Max_gcd,lever; int cd[1000]; for (i = 0;i<20;i++) { cd[i] = 0; } scanf("%d %d",&n,&k); if (n<k) { A = k; B = n; } else { B = k; A = n; } while(1) { R = A % B; if (R == 0) { Max_gcd = B; break; } A = B; B = R; } i = Max_gcd; lever = 1; for (j = 0;j<Number_CD;j++) { while(1) { if (i == 0) { cd[j] = 0; break; } if ((Max_gcd % i) == 0) { cd[j] = i; i--; break; } i--; } if (cd[j] == 0) { printf("\n"); break; } else if(j == (Number_CD - 1)) { printf(" %d\n",cd[j]); break; } else if (lever) { printf("%d",cd[j]); lever = 0; } else { printf(" %d",cd[j]); } } return 0; }
File attachments:
첨부 | 파일 크기 |
---|---|
![]() | 11.01 KB |
Forums:
코드를 빌드한 다음 실행해서 올바른 값이 나온다면
코드를 빌드한 다음 실행해서 올바른 값이 나온다면 옳은 코드입니다.
저는 이렇게 생각했습니다.
첨부파일 그림도 좀 봐주시면 안될까요?
위 소스를 제가 수업 듣는 교수님 서버에 업로드했더니 틀린 소스라고 나오네요 .... 도대체 뭐가 틀렸는지도 감이 안잡혀서 그러는데요. 죄송하지만 그림도 봐주시면 안되나요?
1. 뭐가 틀렸는지 모르겠다면 먼저 임의의 값으로
1. 뭐가 틀렸는지 모르겠다면 먼저 임의의 값으로 테스트를 해보고,
오류가 발생한다면 코드 중간중간에 출력을 넣어서
어디서부터 이상한 값이 나오는지 확인하면 에러를 추적하기 쉬워집니다.
원시 디버깅이라고 하는 방법인데 아주 좋은 방법이지요.
2. 지나치게 복잡한 방법으로 코드를 작성하시는데,
왜 이 코드가 옳은지 질문자 님이 스스로 설명하실 수 있긴 한가요?
이런 과제라면 당연히 이렇게 짰을 겁니다.
작은 코드가 틀렸을 때는 작성한 코드를 수정하는 것보단 새로 만드는 것이 여러모로 편합니다.
3. 코드가 왜 틀렸는지는 설명하지 않았는데, 이유를 들자면 첫째론 코드가 복잡해서 읽기 귀찮고
둘째론 1번에 어떻게 디버깅하는가를 설명했기 때문입니다.
저는 이렇게 생각했습니다.
감사합니다.
다시 해봐야겠군요...
감사합니다.
다시 해봐야겠군요...
이런 문제를 어떻게 풀어야 하는지 key idea를
이런 문제를 어떻게 풀어야 하는지 key idea를 깨닫지 못하면 프로그램이 길어지고 복잡해지고 부정확해질 수 있죠. 그런 key idea를 얼마나 잘 생각해내느냐가 결국은 실력이겠구요. 의미가 있는지 모르겠지만, 작성해 놓은신 코드 잠깐 보니까 "R == 0"이 되지 않으면 Max_gcd가 가비지 값을 갖고 있을텐데 그 값을 i와 lever에 대입하네요.
또 중요한 건 테스트인데요, 코드를 돌려보지 않았지만
또 중요한 건 테스트인데요, 코드를 돌려보지 않았지만 스펙에 적혀있는 36과 24의 경우에도 틀린 답이 출력될 것 같은데요. 왜냐하면 이 두 값은 R == 0 이 되지 않으니까요. 프로그램을 작성하신 다음에 여러 값들로 테스트는 해보시고 서버에 올리신 건가요?
댓글 달기