Algorithm

[HackerRank/js] Mini-Max Sum (배열의 합을 구해 비교하기)

죠죠_ 2022. 7. 4. 13:16

문제 : 

Given five positive integers, find the minimum and maximum values that can be calculated by summing exactly four of the five integers. Then print the respective minimum and maximum values as a single line of two space-separated long integers.

설명이 쉽게 잘 나와있어서 바로 풀겠다 싶어서 호다닥 입력했다.

 

function miniMaxSum(arr) {
let sumArr = [];

for (let i = 0; i <arr.length; i++) {
    let exceptNum = arr[i];
    let n_arr = arr.filter(x => x != arr[i]);
    
    sumArr.push(n_arr.reduce((a,b) => (a+b)));    
    }
const min = Math.min(...sumArr);
const max = Math.max(...sumArr);

console.log(min,max)

배열의 값을 하나씩 제외하면서 남은 값 모두를 reduce를 이용해 더했다.

코드 돌려보고 성공 뜨길래 제출했는데 예상하지 못한 복병을 만났다.

 

내가 짜 놓은 로직대로라면

arr = [5,5,5,5,5] 인 값을 받게 되었을 때 min, max를 구할 수 없다.

어떻게 해결해야 할까

 

답은 생각보다 단순했다

function miniMaxSum(arr) {
    let sum = arr.reduce((a,b) => a+b);
    let max = Math.max(...arr);
    let min = Math.min(...arr);
    
    console.log((sum - max) + ' ' + (sum - min));
}

어차피 배열내 숫자가 만들 수 있는 가장 큰 합은 가장 작은 수를 빼고 더해야하고 

가장 작은 합은 반대로 배열 내 숫자중 가장 큰 수를 빼고 모두 더한 수이다.

 

따라서 전체 합에서 가장 작은 수를 뺀 것 = 가장 큰 합

전체 합 - 가장 큰 수 = 가장 작은 합