아무나개발하자

2개씩 그룹짓기 본문

코딩테스트

2개씩 그룹짓기

개발천재나천재 2022. 8. 5. 01:12

문제

2 * N개의 숫자가 주어졌을 때, 겹치지 않으면서 2개의 원소가 하나의 그룹을 이루도록 하여 총 N개의 그룹을 만드려고 합니다. 적절하게 그룹을 만들어 각 그룹에 있는 원소의 합 중 최댓값이 최소가 되도록 하는 프로그램을 작성해보세요.

예를 들어 N = 2, 주어진 원소가 3, 5, 5, 2 였을 때

그룹을 [5, 5], [3, 2]로 나눈다면 각 그룹에 있는 원소의 합은 순서대로 10, 5 이므로 이 중 최댓값은 10이 됩니다.

만약 그룹을 [3, 5], [5, 2]로 나눈다면 각 그룹에 있는 원소의 합은 순서대로 8, 7 이 되므로 이 중 최댓값은 8이 되며 이보다 최댓값을 더 작게 만들 수는 없습니다.

 

입력 형식

첫 번째 줄에는 만들어야 하는 그룹의 수를 나타내는 N이 주어집니다.

두 번째 줄에는 2 * N개의 숫자가 공백을 사이에 두고 주어집니다.

  • 1 ≤ N ≤ 1,000
  • 1 ≤ 원소 ≤ 1,000

출력 형식

각 그룹의 원소의 합의 최대값이 가장 작아질 수 있도록 N개의 그룹을 적절히 만들었을 때의 최댓값을 출력해주세요.

 

입력

3
8 2 7 1 3 5

출력

9

 

 

코드

# 2 3 5 5
# 1 2 3 5 7 8
# 8 7 5 3 2 1

# 최대값을 최소로 만들기 위해서는 가장 큰수랑 가장 작은수 더하고 그 다음 큰수와 그 다음 작은수 더하고 하는 방법으로해서
# 거기서 최대값을 찾아야 한다.

n = int(input())
arr = list(map(int, input().split()))

arr_sort = []
arr_sort_re = []

arr.sort()
arr_sort =[
    elem
    for elem in arr
]

arr.sort(reverse = True)
arr_sort_re = [
    elem
    for elem in arr
]

# 위에서 말한 방식으로 더해서 최댓값 찾는 과정
# n까지만 해서 최댓값을 찾으면 나머지는 똑같은거 반복이라서 n만 해줌
max_val = 0
for i in range(n):
    val = arr_sort[i] + arr_sort_re[i]
    if val > max_val:
        max_val = val

print(max_val)

 

 

출처 : https://www.codetree.ai/missions/5/problems/group-of-pairs/description

'코딩테스트' 카테고리의 다른 글

할인 행사  (0) 2022.12.26
짝지어 제거하기  (0) 2022.12.25
완전수 판별기  (0) 2022.08.03
청소당번 정하기  (0) 2022.08.02
모의고사  (0) 2022.07.27