2020-09-22 고급프로그래밍

Hyeonu_Chun·2021년 6월 21일
0

Absolute C++ 6th ed./Savitch Chap.5 Programming Project. 2

  1. 문제 기술

    필자는 메인 함수 내의 배열 데이터에서 중복되는 데이터를 삭제하여 나열하고, 동시에 의도적으로 사용되는 배열 내의 데이터 수를 계산하는 함수의 구현을 요한다.

  2. 설계 계획

    함수를 구현하기 위해서 배열내의 각각의 데이터가 중복되지 않아야 한다. 첫번째 배열이 자신을 제외한 나머지 배열을 확인하며 같은 데이터가 있을 경우, 그 데이터의 뒤에서부터 배열을 한 칸 씩 앞으로 이동시킨다. 이와 동시에 Garbage 데이터로 인한 혼동을 막기 위해 마지막 번째 배열은 널문자로 초기화 시킨다. 마찬가지로 두번째 데이터 또한 첫번째 데이터와 자신을 제외한 나머지 데이터와 비교하며 중복되는 데이터를 삭제 및 이동시킨다. 같은 방법으로 함수에 입력 받는 사이즈 값에 따라 동작을 수행한다.

  3. 데이터 처리 과정

    문제에 따라 deleteRepeats 함수는 입력 받는 데이터는 Character type의 배열과 배열내의 의도적으로 사용되는 배열의 개수이다. 즉, 매개변수들은 각각 Character pointer type과 int의 참조형이다. 입력 받은 배열은 함수 정의부에 따라 3중 For문에 의해 데이터를 비교, 삭제 및 이동시키고 정수 값에 중복되지 않은 데이터의 개수를 입력시킨다. 이후 deleteRepeats 함수에 의해 중복되지 않은 데이터와 개수가 출력되게 된다.

  4. 실행 결과 및 분석

#include<iostream>
using namespace std;

void deleteRepeats(char *, int &);

int main() {
	char a[10];
	a[0] = 'c';
	a[1] = 'a';
	a[2] = 'c';
	a[3] = 'a';
	int size = 4;
	deleteRepeats(a, size);
}

void deleteRepeats(char *ch, int &size) {

	for (int i = 0; i < size; i++) {
		for (int j = i + 1; j < size; j++) {
			if (ch[i] == ch[j]) {
				for (int k = j + 1; k < size; k++) {
					ch[k - 1] = ch[k];
				}
				size--;
				ch[size] = NULL;
				j--;
			}
		}
	}
	cout << ch[0] << ch[1] << ch[2] << ch[3] << size << endl;
}
  1. 소감 및 피드백

메인에서 입력되는 데이터에 따라 구동하는 함수이다. 결과적으로 3중 For문을 이용해 비교하며 데이터 삭제 및 이동을 위해 데이터를 하나하나 앞으로 옮기는 행위는 적은 데이터에서는 상관이 없으나 중복 횟수가 많고 배열의 길이가 길어질 시 연산의 횟수를 끊임없이 늘리는데 동조할 것이다. 동적 메모리 할당에 관해 공부하여 더욱 깔끔한 코드를 작성해야 함을 다시 끔 느꼈다.

profile
Stay hungry, stay foolish

0개의 댓글