배열 선언시에 int opt[n] 이런식으로도 선언을 할수 있는건가요??
글쓴이: faraplay / 작성시간: 금, 2012/11/09 - 3:30오후
제가 어느.싸이트를 돌아가니다가 ... 이런 코드를 보왔습니다.
#include <stdio.h> int n; int denom[]={1,2,4,5,20,25}; int coinCounter(int n); int main(){ printf("Please Enter a Number : "); scanf("%d",&n); int coinmin,orin,i; orin=n; i=coinmin=0; for(i=(sizeof(denom)/4)-1;i>=0;i--){ coinmin =coinmin+n/denom[i]; n=n%denom[i]; } printf("Coin Min By Greedy Algorithm : %d\n",coinmin); printf("Dynamic Algorithm : %d\n",coinCounter(orin)); return 0; } int coinCounter(int n){ int opt[n]; int largest[n]; int i,j,a; i=j=0; for(j=1;j<=n;j++){ opt[j]=10000; //printf("xxn"); for(i=(sizeof(denom)/4)-1;i>=0;i--){ if(denom[i]==j){ opt[j]=1; largest[j]=j; } else if(denom[i]<j){ a=opt[j-denom[i]]+1; } if(a<opt[j]){ opt[j]=a; largest[j]=denom[i]; } } } return opt[n]; }
그리드 알고리즘과 다이나믹 알고리즘에 대한 거였는데... 소스 결과는 잘못된 결과가 나오긴 하는데 제가 궁금한건 소스 어느 부분이 잘못되어서
결과가 이상하게 나오느냐는 것이 아니라
int coinCounter(int n){ int opt[n]; int largest[n]; int i,j,a;
이부분이 궁금합니다. 제가 알기로는 저 소스에서 n는 const int 형(상수)이 들어가야 되는 걸로 알고 있는데.. 제가 잘못 알고 있는건가요??
변수를 받아서 크기를 정하기 위해선 malloc를 사용해야 되는걸로 알고있는데... 저부분이 되는걸 보니 이해가 되질 않습니다.ㅠㅠ
설명 해주시면 감사하겠습니다. ㅠㅠ
Forums:
C99 스펙의 6.7.5.2 Array
C99 스펙의 6.7.5.2 Array declarators 에 설명과 예시가 있네요. 예시만 옮겨보니 아래와 같습니다.
VLA(Variable Length Array) 라고 하는 것이고 자동변수로 쓰이는건 허용되지만 전역이나 함수 내부 정적 변수로는 허용되지 않는 것 같습니다.
이 답변을 제출하려고 '저장' 버튼을 누르니 사이트에서 응답이 없어져 버리더군요.. 파워가 나간 타이밍이 절묘했었습니다. 깜짝 놀랐었어요..
Thanks for being one of those who care for people and mankind.
I'd like to be one of those as well.
댓글 달기