네이버 지식이 풀이
https://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=315375786&page=1#answer2
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
typedef struct {
int* ArrOne;
int* ArrTwo;
int* ArrThree;
int* TestArray;
int size;
int subSize;
}Total;
// ______________________________________________
void _init_(Total* param); // func (1)
void numBerInput(Total* param); // func (2)
void arraySetting(Total* param); // func (3)
void arrayOne(Total* param); // func (4)
void arrayTwo(Total* param); // func (5)
void arrayThree(Total* param); // func (6)
// ______________________________________________
int main(void) {
Total tnode;
_init_(&tnode); // 데이터 초기화
numBerInput(&tnode);
arraySetting(&tnode);
arrayOne(&tnode);
arrayTwo(&tnode);
arrayThree(&tnode);
// 메모리 해제
free(tnode.ArrOne);
free(tnode.ArrTwo);
free(tnode.ArrThree);
free(tnode.TestArray);
return 0;
} // end of main function
// ______________________________________________
void _init_(Total* param) { // func (1)
param->ArrOne = NULL; // 홀수
param->ArrTwo = NULL;
param->ArrThree = NULL;
param->TestArray = NULL;
param->size = 0x0;
param->subSize = 0x0;
} // end of _init_ function
// ______________________________________________
void numBerInput(Total* param) { // func (2)
int i; // index
printf("숫자 입력 : ");
scanf("%d", ¶m->size);
param->TestArray = (int*)malloc(sizeof(int)*param->size);
if (param->TestArray == NULL) {
printf("memorry allocation fail\n");
exit(1);
}
// 데이터 초기화
memset(param->TestArray, 0, sizeof(int)*param->size);
for (i = 0; i < param->size; i++) {
param->TestArray[i] = i + 1;
}
} // end of numBerInput function
// ______________________________________________
void arraySetting(Total* param) { // func (3)
if (param->size % 2 == 0) { param->subSize = param->size / 2; }
else {
param->subSize = (param->size / 2) + 1;
}
param->ArrOne = (int*)malloc(sizeof(int)*param->subSize);
param->ArrTwo = (int*)malloc(sizeof(int)*param->subSize);
param->ArrThree = (int*)malloc(sizeof(int)*param->subSize);
if (param->ArrOne == NULL || param->ArrTwo == NULL || param->ArrThree == NULL) {
printf("memorry allocation fail\n");
free(param->TestArray);
exit(1);
}
// 데이터 초기화
memset(param->ArrOne, 0, sizeof(int)*param->subSize);
memset(param->ArrTwo, 0, sizeof(int)*param->subSize);
memset(param->ArrThree, 0, sizeof(int)*param->subSize);
} // end of arrayOneSetting function
// ______________________________________________
void arrayOne(Total* param) { // func (4)
int i;
int num = 1;
for (i = 0; i < param->subSize; i++, num += 2) {
param->ArrOne[i] = num;
}
//
printf("배열1 = {");
for (i = 0; i < param->subSize; i++) {
printf("%d", param->ArrOne[i]);
if (i != param->subSize - 1) { printf(","); }
else {
printf("}\n");
}
}
} // end of arrayOne function
// ______________________________________________
void arrayTwo(Total* param) { // func (5)
srand((unsigned)time(NULL));
int* tmpArr = NULL;
int i, j;
int choice = 0x0;
int num = 1;
int t = param->subSize;
// 동적할당
tmpArr = (int*)malloc(sizeof(int)*t);
// 동적할당 실패시
if (tmpArr == NULL) {
printf("memorry allocation fail !!\n");
free(param->ArrOne);
free(param->ArrTwo);
free(param->ArrThree);
free(param->TestArray);
exit(1);
}
// 동적할당 성공시
// 데이터 0으로 초기화
memset(tmpArr, 0, sizeof(int)*param->subSize);
// 데이터 입력 : ex) 1, 3, 5, 7, 9
for (i = 0; i < param->subSize; i++, num += 2) {
tmpArr[i] = num;
}
// 랜덤으로 값 입력
for (i = 0; i < param->subSize; i++) {
choice = rand() % t;
param->ArrTwo[i] = tmpArr[choice];
if (choice != t - 1) {
for (j = choice; j < t - 1; j++) {
tmpArr[j] = tmpArr[j+1];
}
}
--t;
}
printf("배열2 = {");
for (i = 0; i < param->subSize; i++) {
printf("%d", param->ArrTwo[i]);
if (i != param->subSize - 1) { printf(","); }
else {
printf("}\n");
}
}
// 메모리 해제
free(tmpArr);
} // end of arrayTwo function
// ______________________________________________
void arrayThree(Total* param) {
srand((unsigned)time(NULL));
int* tmpArr = NULL;
int i, j;
int choice = 0x0;
int num = 2;
int t = param->subSize;
// 동적할당
tmpArr = (int*)malloc(sizeof(int)*t);
// 동적할당 실패시
if (tmpArr == NULL) {
printf("memorry allocation fail !!\n");
free(param->ArrOne);
free(param->ArrTwo);
free(param->ArrThree);
free(param->TestArray);
exit(1);
}
// 동적할당 성공시
// 데이터 0으로 초기화
memset(tmpArr, 0, sizeof(int)*param->subSize);
// 데이터 입력 : ex) 1, 3, 5, 7, 9
for (i = 0; i < param->subSize; i++, num += 2) {
tmpArr[i] = num;
}
// 랜덤으로 값 입력
for (i = 0; i < param->subSize; i++) {
choice = rand() % t;
param->ArrThree[i] = tmpArr[choice];
if (choice != t - 1) {
for (j = choice; j < t - 1; j++) {
tmpArr[j] = tmpArr[j + 1];
}
}
--t;
}
printf("배열3 = {");
for (i = 0; i < param->subSize; i++) {
printf("%d", param->ArrThree[i]);
if (i != param->subSize - 1) { printf(","); }
else {
printf("}\n");
}
}
// 메모리 해제
free(tmpArr);
} // end of arrayThree function
'언어 > c언어' 카테고리의 다른 글
네이버 풀이 (0) | 2018.12.01 |
---|---|
네이버 문제 풀이 - 최대공약수 (0) | 2018.11.28 |
더블릿 문제 (0) | 2018.11.27 |
네이버 지식인 풀이 (c) (0) | 2018.11.24 |
네이버 지식인 풀이 (0) | 2018.11.22 |