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;
}
Comments