문제
다섯 개의 정수를 가진 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개 값을 더하면 최댓값이 나온다는 것입니다. 이것만 이해하고 나면 문제를 쉽게 풀 수 있습니다.
'Algorithm > HackerRank' 카테고리의 다른 글
[HackerRank]Birthday Cake Candles(풀이 성공) (0) | 2021.02.01 |
---|---|
[HackerRank]Diagonal Difference(풀이 성공) (0) | 2021.01.28 |
[HackerRank]Compare the Triplets(풀이 성공) (0) | 2021.01.16 |
[HackerRank]Plus Minus(풀이 성공) (0) | 2021.01.10 |
[HackerRank] Staircase(풀이 성공) (0) | 2020.12.31 |