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", &param->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