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값을 구해 출력해주었다.
'HackerRank > Algorithms' 카테고리의 다른 글
[HackerRank C] Warmup : Birthday Cake Candles (0) | 2021.07.28 |
---|---|
[HackerRank C] Implementation : Subarray Division (0) | 2021.07.18 |
[HackerRank C] Strings : HackerRank in a String! (0) | 2021.07.11 |
[HackerRank C] Strings : CamelCase (0) | 2021.07.11 |
[HackerRank C] Implementation : Grading Students (0) | 2021.07.11 |