(구) 개발지식 (공통)/코딩 연습 (문제풀이)

[HackerRank/Easy] Mini-Max Sum

WHDE 2021. 9. 12. 20:55

역시 로직 자체는 쉬운 문제다.

다만 오버플로우를 조심해야 한다.

 

문제를 보면 Constraints가 1 <= arr[i] <= 10^9인데

int로 표현할 수 있는 범위를 넘을 수 있으므로 (int의 최대값은 2,147,483,647 : 대충 21억, 문제는 최대 10억까지이므로 이런 수가 3번 있다 하면... 바로 오버플로우가 일어난다.) 이를 신경써주어야 하는 문제였다.

 

출력할때도 %d를 그냥 쓰면 오버플로우가 일어나므로, %ld를 써서 long형으로 출력해주어야 한다.

다들 싫어하겠지만 알고리즘 문제 풀면서 커다란 수가 더욱 싫어졌다.

void miniMaxSum(vector<int> arr) {
    long sum = 0;
    int max = INT_MIN;
    int min = INT_MAX;
    
    for(int i = 0; i < arr.size(); i++) {
        sum += arr[i];
        if(arr[i] > max) { max = arr[i]; }
        if(arr[i] < min) { min = arr[i]; }
    }
    
    printf("%ld %ld\n", sum-max, sum-min);
}