1. 문제

 

6. 동일한 크기의 배열을 변환하는 다음 2개의 static 멤버 함수를 가진 ArrayUtility2 클래스를 만들고, 이 클래스를 이용하여 아래 결과와 같이 출력되도록 프로그램을 완성하라.

 

 

2. 결과

 

 

 

3. 코드

 

#include <iostream>
using namespace std;

class ArrayUtility2 {
public :
	static int* concat(int s1[], int s2[], int size){
		int* p = new int[size];
		int n = size/2;
		for(int i=0; i< n; i++) {
			p[i] = s1[i];
			p[i+n] = s2[i];
		}
		return p;
	}
	static int* remove(int s1[], int s2[], int size, int& retSize) {
	
		for(int i=0; i< size; i++) {
			for(int j=0; j< size; j++) {
			 if(s1[i] == s2[j] ) s1[i] =NULL;
			} 
		}
		for(int i=0; i< size ; i++) 
			if(s1[i] !=NULL) retSize++;
		
		int *p = new int [retSize];
		int n=0;
		for(int i=0; i< size; i++)
			if(s1[i] !=NULL ) { p[n] = s1[i]; n++; }

		if(retSize == 0) return NULL;
		else return p;
	}
};

int main() {
	int x[5], y[5], retsize=0, size;

	cout << "정수를 5 개 입력하라. 배열 x에 삽입한다>>";
	cin >> x[0] >> x[1] >> x[2] >> x[3] >> x[4];
	cout << "정수를 5 개 입력하라. 배열 y에 삽입한다>>";
	cin >> y[0] >> y[1] >> y[2] >> y[3] >> y[4];
	cout << "합친 정수 배열을 출력한다." << endl;

	size = sizeof(x)/4 + sizeof(y)/4;
	int *temp = ArrayUtility2::concat( x, y, size );
	for(int i=0; i< size;i++) cout << temp[i] << ' ';
	cout << endl;

	size = sizeof(x)/4;
	temp = ArrayUtility2::remove( x, y, size, retsize );
	cout << "배열 x[]에서 y[]를 뺀 결과를 출력한다. 개수는 " << retsize << endl;
	for(int i=0; i< retsize;i++) cout << temp[i] << ' ';
	cout << endl;
}

 

 

 

4. 설명

 

static int* concat() 함수는 2개의 int형 배열과 size를 입력 받으면, 크기가 size만큼인 int형 배열을 동적으로 생성한 후 2개의 배열을 연결한 배열 하나를 return 합니다.

 

static int* remove() 함수는 2개의 배열과 size 그리고 참조 변수 retSize를 입력 받습니다. 

 

그 후 첫 번째 배열과 두 번째 배열을 비교하여서 첫 번째 배열의 요소 중 두 번째 배열의 요소와 일치하지 않는 것의 수를 구한 후 retSize에 저장합니다. 그리고 이 과정에서 첫 번째 배열에서 일치하는 요소는 NULL값을 삽입합니다.

 

그 후 retSize 크기만큼의 int형 배열을 동적으로 생성한 후 첫 번째 배열의는 첫 번째 배열과 두 번째 배열 중 일치하지 않는 값 빼고는 다 NULL을 삽입하였으므로 NULL이 아니라면 동적 생성했던 배열의 요소로 삽입합니다.

 

 

그리고 이 동적 생성하였던 배열을 return함으로써 일치하지 않는 요소들만 저장되어있는 배열을 생성합니다.

 

 

+ Recent posts