본문 바로가기
Algorithm/HackerRank

[HackerRank]Mini-Max Sum(풀이 성공)

by 전봇대파괴자 2021. 1. 6.

문제

 

다섯 개의 정수를 가진 array가 입력된다.(단, 1<arr[i]<10ⁿ, n=9) array 내 4개 혹은 5개의 값의 합 중 가장 작은 값과 가장 큰 값을 차례로 출력한다. 

 

Sample Input :

1 2 3 4 5

 

Sample Output :

10 14

 

내 코드:

import math
import os
import random
import re
import sys


def miniMaxSum(arr):
    arr = sorted(arr, reverse=False) # array를 오름차순으로 재정렬
    min_sum = sum(arr[:-1]) # 앞에서부터 4개 값을 합한다 
    max_sum = sum(arr[1:]) # 뒤에서부터 4개 값을 합한다
    return min_sum, max_sum
    
if __name__ == '__main__':
    arr = list(map(int, input().rstrip().split()))

    answer = miniMaxSum(arr)
    print(answer[0], answer[1]) # 튜플 형태의 answer를 차례로 출력한다

 

Comment: 핵심은 합들 중 가장 작은 값, 가장 큰 값이라는 말을 이해하는 것입니다. 처음에는 모든 값들의 합을 다 비교해야 되는 건가 싶어 멘붕이 왔었는데, 예시를 계속 보다 보니 뭔가 규칙이 있을 것만 같은 느낌이 들더라고요. 

# min_sum은 합들 중 최소, max_sum은 합들 중 최대입니다.

# case 1
arr=[1,2,3,4,5]
min_sum = 10 # 1+2+3+4
max_sum = 14 # 2+3+4+5

# case 2
arr=[2,3,4,5,6]
min_sum = 14 # 2+3+4+5
max_sum = 18 # 3+4+5+6

# case 3
arr=[3,4,5,6,7]
min_sum = 18 # 3+4+5+6
max_sum = 22 # 4+5+6+7

 보시다시피 최솟값은 가장 작은 값부터 차례대로 더했을 때, 최댓값은 가장 큰 값부터 차례대로 더했을 때 나온다는 것을 확인할 수 있습니다. 더 쉽게 말해 array를 오름차순 정렬로 만든 후, 앞에서부터 4개 값을 더하면 최솟값이 나오고, 반대로 뒤에서부터 4개 값을 더하면 최댓값이 나온다는 것입니다. 이것만 이해하고 나면 문제를 쉽게 풀 수 있습니다.