Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- CPU
- 가장 가까운 단어
- annotation
- stack
- Spring
- DICTIONARY
- IO bound
- 십진수 이진수 전환
- URL
- 문자열
- dns
- port
- CPU bound
- http
- 동시성문제
- green thread
- reflection
- TCP/IP
- 코딩테스트
- 프로그래머스
- Split
- frontPattern
- process
- springMVC
- 문자열 내마음대로 정렬하기
- 2차원 배열 출력
- deque
- java
- Queue
- 크기가 작은 부분 문자열
Archives
- Today
- Total
아무나개발하자
2개씩 그룹짓기 본문
문제
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