CS50 스터디 미션 4주차 문제풀이

1 minute read

4주차 팀미션 (알고리즘)

1번 문제

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int compare(const void *a, const void *b)
{
int num1 = *(int *)a;
int num2 = *(int *)b;
if (num1 > num2)
return -1;
if (num1 < num2)
return 1;
return 0;
}

int func(int * arr1, int * arr2)
{
int i = 0;
qsort(arr1, 5, sizeof(int), compare);
qsort(arr2, 5, sizeof(int), compare);
for(;i < 5; i++)
if(arr1[i] != arr2[i]) return -1;
return 0;
}

int main()
{
int arr1[] = {1,1,1,3,2};
int arr2[] = {2,1,1,3,1};
if(func(arr1, arr2) < 0)
printf("False\n");
else
printf("True\n");
return 0;
}

2번 문제

#include <stdio.h>
#include <math.h>

int* sort_array(int number[]);              // 버블 정렬
void print_array(int number[]);
float get_average(int number[]);            // 평균
float get_distance(float value);            // 총 거리

int arr[] = {1, 2, 7, 9, 1, 5};             // 배열 선언
int arr_size = sizeof(arr) / sizeof(int);   // 자료형의 크기 sizeof

int main(void)
{
    int* sorted = sort_array(arr);          // arr의 요소 정렬

    printf("정렬된 배열 : ");
    print_array(sorted);

    float average_value = get_average(sorted);      // sorted의 평균값 반환 left, right
    int center_value = sorted[(int)arr_size / 2];   // 평균값 계산

    printf("배열의 중간값 : %d\n", center_value);
    printf("배열의 평균값 : %.2f\n", average_value);


    // 2차원 공간에서 두 점(x1, y1)와 (x2, y2) 사이의 거리를 계산
    float total_distance_average = get_distance(average_value);
    float total_distance_center = get_distance(center_value);

    printf("평균값의 총 거리: %.2f\n", total_distance_average);
    printf("중간값의 총 거리: %.2f\n", total_distance_center);

    total_distance_average < total_distance_center ?
        printf("최소 거리 %.2f 를 가진 좌표 %.2f가 가깝습니다.\n", total_distance_average, average_value) :
        printf("최단 거리 %.2f 를 가진 좌표 %d가 가깝습니다.\n", total_distance_center, center_value);

    return 0;
}

int* sort_array(int number[])
{
    int temp;

    for(int i = 0; i < arr_size; i++) {
        for(int j = 0; j < arr_size - 1; j++) {
            if(number[j] > number[j+1]){
                temp = number[j];
                number[j] = number[j+1];
                number[j+1] = temp;
            }
        }
    }

    return number;
}

void print_array(int array[])
{
    for(int i = 0; i < arr_size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}


float get_average(int number[])
{
    float average = 0;

    for(int i = 0; i < arr_size ; i++){
        average += number[i];
    }

    average = average/arr_size;

    return average;
}

float get_distance(float value)
{
    float sum = 0;

    for(int i = 0; i < arr_size; i++) {
        sum += fabs(arr[i] - value);
    }

    return sum;
}

Tags:

Categories:

Updated:

Comments