- 문제 : https://www.acmicpc.net/problem/20300
정답 풀이
이 문제는 다음과 같은 과정으로 진행된다.
- 주어진 배열의 원소들 중 한 번에 2개의 원소씩 짝지어 값을 더한다. 이때 각 값의 합이 최소가 되도록 해야한다 -> (그리디)
- 두 숫자의 합이 최소가 되기 위해서는, 원소를 오름차순 정렬한 후 양쪽에 있는 값을 더하면 된다. [i번째] 원소 + [n - 1 -i ]번째 원소
- 이 때 반복문 범위는 인덱스 0부터 절반까지 진행한다. 절반에서 원소가 정해지면 반대편은 자동으로 정해지기 때문이다. 값 중복하지 않기 위함도 있다.
- 배열 원소 개수가 홀수인 경우에는 두 개씩 묶고 하나의 원소가 남기 때문에 아래와 같이 추가 연산이 필요하다.
- 모든 원소가 짝지어지고 하나의 원소가 남는데, 그 원소가 가장 큰 숫자이면 된다. 배열을 오름차순 정렬했으므로 가장 오른쪽 값만 result에 넣는다.
n = int(input())
arr = sorted(list(map(int, input().split())))
result = []
if n % 2 == 1:
result.append(arr.pop())
m = len(arr)
for i in range(m // 2):
result.append(arr[i] + arr[m - 1 - i])
print(max(result))
'백준' 카테고리의 다른 글
[백준/누적합] 21758번 : 꿀 따기 (0) | 2024.02.13 |
---|---|
[백준/브루트포스] 1082번 : 부분수열 합 (0) | 2024.02.13 |
[백준/정렬] 2910번 : 빈도 정렬 (2) | 2024.02.12 |
[백준/bfs] 2589번 : 보물섬 (0) | 2024.02.12 |
[백준/브루트포스] 1018번 : 체스판 다시 칠하기 (2) | 2024.02.11 |