도전 프로그래밍2 - 3번문제

 

 

길이가 10인 배열을 선언하고 총 10개의 정수를 입력받는다. 

단, 입력 받은 숫자가 홀수이면 배열의 앞에서부터 채워나가고, 짝수이면 뒤에서부터 채워나가는 형식을 취하기로 하자. 

 

따라서 사용자가 [1,2,3,4,5,6,7,8,9,10]을 입력했다면, 

배열에는 [1,3,5,7,9,10,8,6,4,2]의 순으로 저장이 되어야 한다. 

 

#include <stdio.h>
/*
도전 프로그래밍2 - 열혈C 329pg
*/

int main()
{
	int arr[10];
	int i;
	int result[10] = { 0, };
	
	//10개 입력받기 
	for (i = 0; i < 10; i++)
	{
		scanf("%d", &arr[i]);
	}

	//홀수는 result의 앞 부터 저장 
	for (i = 0; i < 10; i++)
	{
		if (arr[i] % 2 == 1) 
		{
			result[i] = arr[i];
			printf("%d ", result[i]);
		}
	}
	//짝수는 result의 뒤 부터 저장 
	for (i = 9; i >=0; i--)
	{
		if (arr[i] % 2 == 0) 
		{
			result[i] = arr[i];
			printf("%d ", result[i]);
		}
	}
	return 0;
}

 

728x90

삽입 정렬(Insertion Sort)

배열 인덱스 [1]번부터 자기 앞의 숫자와 값의 비교를 한다. 

#include <stdio.h>

InsertionSort(int *InsertionObject, int length)
{
	int i, j, temp;

	for (i = 1; i < length; i++)       //i=1번째 부터 시작 
	{
		for (j = i; j >0; j--)	//j를 j의 앞의 수들과 비교한다 
		{
			if (InsertionObject[j - 1] > InsertionObject[j])
			{
				//SWAP
				temp = InsertionObject[j - 1];
				InsertionObject[j - 1] = InsertionObject[j];
				InsertionObject[j] = temp;
			}
		}
		//과정출력
		for (int a = 0; a < length; a++)
		{
			printf("%d ", InsertionObject[a]);
		}
		printf("\n");
	}
}

int main()
{
	int InsertionObject[] = { 6, 3, 8, 12, 2, 9, 1, 27 };
	int length = sizeof(InsertionObject) / sizeof(int);
	InsertionSort(InsertionObject, length);
	return 0;
}

 

728x90

전제: 배열의 데이터는 정렬된 상태이다.

 

<순서> 

1. 배열의 중앙(mid)에 찾는 값(target)이 저장되어 있는지 확인한다.

2. 대소 결과 탐색의 대상을 반으로 줄인다.

3. 1과 2를 반복한다.

 

#include <stdio.h>

int BSearch(int *arr, int len, int target)
{
	int first = 0;			//탐색 시작 인덱스
	int last = len - 1;		//탐색 마지막 인덱스 
	int mid;			

	while (first <= last)    
	{
		mid = (first + last) / 2;		//mid: 중앙인덱스 
		if (target == arr[mid])
		{
			return mid;		//찾은 경우 인덱스 mid를 리턴(탐색 완료)
		}
		else  //아니라면, 탐색 대상을 반으로 줄인다 
		{
			if (target > arr[mid])
			{
				first = mid + 1;	//타겟이 더 크면 first의 위치를 옮김
			}
			else
			{
				last = mid - 1;		//타겟이 더 작으면 last의 위치를 옮김
			}
		}
	}
	return -1;	//탐색 실패한 경우 
}

int main()
{
	int arr[] = { 1, 4, 5, 7, 9, 14 };		//정렬되어 있는 배열임을 전제.
	int len = sizeof(arr) / sizeof(int);
	int index;

	index = BSearch(arr, len, 9);	//'9'를 찾아본다 
	if (index == -1)
		printf("탐색실패!\n");
	else
		printf("target의 인덱스: %d\n", index);

	return 0;
}

 

728x90

+ Recent posts