카테고리 없음

과제7 - Array (5 ~ 8)

yha97 2021. 6. 22. 11:05

array size를 입력받고 나서 element를 입력, 원하는 값과 position에 따라 값을 넣는 문제이다.

 

 

#include <stdio.h>
#define MAX_SIZE 100 // Maximum array size

int main(){
	int arr[MAX_SIZE]; // declare array
	int n, i, insert, pos;
	
	// inputs size of array from user
	printf("Enter size of array: ");
	scanf("%d", &n);
	
	// inputs elements in the array
	printf("Enter elements in the array : ");
	for(i=0; i<n; i++){
		scanf("%d", &arr[i]);
	}
	
	// input num that will be inserted
	printf("Enter element to insert : ");
	scanf("%d", &insert);
	// input position
	printf("Enter the element position : ");
	scanf("%d", &pos);
	
	// Error message when the insert position is invalid
	if(pos <= 0 || pos > n){
		printf("Position Error!!");
		return 0;
	}
		
	// inserting number into entered position
	for(i=n; i>(pos)-1; i--){
		arr[i] = arr[i-1];
	}
	arr[pos-1] = insert;
	
	// print output
	printf("Array elements after insertion : ");
	for(i=0; i<(n+1); i++){
		printf("%d ", arr[i]);
	}
	return 0;
}

자료구조에서 배운 것처럼 맨 뒤에서부터 하나씩 옮기는 방식으로 for문을 통해 하나씩 옮기는 것으로 문제를 해결했다.

 

이 문제를 풀면서 자료구조 없이 맨땅에 문제를 풀었다면 꽤나 어렵지 않았을까 생각이 들었다.

 

 

Q5와 반대로 array size, element를 입력받은 후 원하는 position의 element를 출력하는 프로그램이다.

 

 

#include <stdio.h>
#define MAX_SIZE 1000 // Maximum array size

int main(){
	int arr[MAX_SIZE]; // declare array
	int n, i;
	int pos;
	
	// inputs size of array from user
	printf("Enter size of array: ");
	scanf("%d", &n);
	
	// inputs elements in the array
	printf("Enter elements in the array : ");
	for(i=0; i<n; i++){
		scanf("%d", &arr[i]);
	}
	
	// input element position to delete
	printf("Enter the element position to delete : ");
	scanf("%d", &pos);
	
	// if user entered invalid position
	if(pos < 1 || pos > n){
		printf("Invalid Position!!");
		return 0;
	}
	
	// deleting
	for(i=pos-1; i<n; i++){
		arr[i] = arr[i+1];
	}
	n--; // shorten total size of array
	
	// printing output
	printf("\nElements of array after delete are : ");
	for(i=0; i<n; i++)
		printf("%d ", arr[i]);
	
	return 0;
}

먼저 입력받은 position이 valid한지를 확인하는 if문을 넣었고, for문을 통해 원하는 position으로 i값을 설정, 증가하면서 값을 덮는 방식으로 delete를 진행했다.

 

또한 delete를 했을 때 array의 총 length가 줄어들기 때문에 array size 또한 1을 차감하여 출력하는데 오류가 없도록 문제를 해결하였다.

 

 

array size와 그에 맞는 element 값을 입력받은 후 오름차순으로 출력하는 프로그램이다.

 

#include <stdio.h>
#define MAX_SIZE 1010 // Maximum array size

int main(){
	int arr[MAX_SIZE]; // declare array
	int n, i, j, temp;
	
	// inputs size of array from user
	printf("Enter size of array: ");
	scanf("%d", &n);
	
	// inputs elements in the array
	printf("Enter elements in the array : ");
	for(i=0; i<n; i++){
		scanf("%d", &arr[i]);
	}
	
	// sorting array with bubble sort
	for(i=0; i<n; i++){
		for(j=n-1; j>i; j--){
			if(arr[j-1] > arr[j]){
				temp = arr[j-1];
				arr[j-1] = arr[j];
				arr[j] = temp;
			}
		}
	}
	
	// printing output
	printf("\nElements of array in ascending order: ");
	for(i=0; i<n; i++)
		printf("%d ", arr[i]);
		
	return 0;
}

본인의 경우 가장 만만하게 사용했던 sort 방법인 Bubble sort를 채택하여 구현하였다.

 

참고 : https://ko.wikipedia.org/wiki/%EA%B1%B0%ED%92%88_%EC%A0%95%EB%A0%AC

 

거품 정렬 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 무작위 배열수의 거품 정렬 예 거품 정렬( - 整列, 영어: bubble sort, sinking sort)은 두 인접한 원소를 검사하여 정렬하는 방법이다. 시간 복잡도가 O ( n 2 ) {\displaystyl

ko.wikipedia.org

 

1학년 다른 과목에도 Bubble sort를 배웠기 때문에 이를 적절히 활용해서 문제를 해결한다면 큰 어려움은 없었을 것이다.

 

다만 i와 j값을 초기화할 때 설정해야 하는 값과 마지막 값을 어떻게 설정해야 하는지를 처음에는 몰라서 고민했던 기억이 있다.

 

이런 경우에는 구글링을 통해 문제를 해결하는 것이 좋은듯

 

 

array size를 입력, element를 입력받은 후 pointer를 통해 모든 element의 합을 구한 후 이를 출력하는 프로그램이다.

 

#include <stdio.h>
#define MAX_SIZE 100 // Maximum array size

int main(){
	int arr[MAX_SIZE]; // declare an array
	int n, i, sum = 0;
	int *ptr; // declaring pointer and link with array
	ptr = arr;
	
	// inputs size of array from user
	printf(" Input size of array: ");
	scanf("%d", &n);
	
	// inputs elements in the array using pointer
	printf(" Input %d number of elements in the array : \n", n);
	for(i=0; i<n; i++){
		printf(" element - %d : ", i);
		scanf("%d", ptr+i);
		sum += *(ptr+i);
	}
	
	// print output
	printf("Sum of Array : %d", sum);
	
	return 0;
}

arr이 변수이기 때문에 포인터 변수 ptr은 arr과 동일하다는, ptr = arr;를 선언해야 한다.

 

맨 처음 포인터를 배울 때 *(asterisk)가 포인터를 결정하는 것인줄 알고 굉장히 혼동했던 기억이 있다.

 

아마 포인터 변수에 대한 개념이 부족해서 그런 것 같다.

 

아무튼 문제는 단순 배열을 입력받는 형식이 아닌 ptr+i를 통해 입력받고 sum += *(ptr+i)를 통해 연산을 진행하는 방식으로 문제를 해결하였다.