HackerRank/Algorithms

[HackerRank C] Warmup : Mini-Max Sum

ruming 2021. 7. 18. 01:05

5개의 정수 중 각 숫자를 제외한 합 중에 가장 작은 값과 큰 값을 출력하면 되는 문제다.

 

※ 자료형 주의 : 합은 int 범위를 넘어갈 수 있음.

 

처음에 생각했던 방법은 두 가지다.

먼저 5개를 다 합한 sum에서 배열의 첫번째 인덱스부터 마지막 인덱스까지 뺀 값을 s_arr배열에 저장해 합을 구해놓고,

 

1. s_arr배열을 크기순으로 정렬해 첫번째 값과 마지막 값을 출력

2. s_arr배열에서 min값과 max값만 따로 구함.

 

혹은 아예 s_arr에 저장할 때 크기순으로 비교하면서 저장해 큰 값은 뒤로 미는 방식도 생각했는데 너무 복잡할 것 같아 2번을 선택했다.

void miniMaxSum(int arr_count, int* arr) {
    int i, j;
    double s_arr[5] = {0}, sum = 0;
    for(i=0; i<5; i++)  sum += arr[i];
    for(i=0; i<5; i++){
        s_arr[i] = sum - arr[i];
    }
    double min = s_arr[0], max = s_arr[0];
    for(i=1; i<5; i++){
        if(min > s_arr[i])  min = s_arr[i];
        if(max < s_arr[i])  max = s_arr[i];
    }
    printf("%.lf %.lf", min, max);
}

int형을 넘어갈 수 있는 s_arr배열과 sum은 double로 선언해준다. 그 다음에 s_arr에 각 인덱스 값을 뺀 4개의 합을 저장했다. 그리고 if문으로 min값과 max값을 구해 출력해주었다.