과제7 - Array (5 ~ 8)
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)를 통해 연산을 진행하는 방식으로 문제를 해결하였다.