백준 11597 Excellence [c++]
in Develop / Solving
어제부터 한국어 아닌 문제만 고르는중…
문제 분석
- 영어…
번역
문제
세계 코딩 연맹은 한 쌍의 프로그래머로 구성된 팀의 거대한 온라인 프로그래밍 토너먼트를 준비하고 있다.
데이비드 심판은 남동부 대표단의 팀을 구성하는 일을 맡고 있다. 모든 학생들은 정확히 두 명이 한 팀으로 구성되어야 한다. 다행히도, 전체 학생 수는 짝수이다.
하지만, 그는 경기에 출전하는 각 팀이 최소 총 등급을 충족하도록 함으로써 다른 심사위원들 사이에서 그의 순수한 평판을 유지하기를 원합니다. 우리는 팀의 총 등급을 팀에 있는 두 개인의 등급의 합으로 정의한다.
David가 X보다 크거나 같은 총 등급을 가진 팀을 구성할 수 있도록 최대값 X를 결정하도록 도와줍니다.
입력
첫 번째 줄에는 온라인 프로그래밍 토너먼트에 참가하려는 학생 수 n이 주어진다(1 ≤ n ≤ 10^5, n은 짝수). 다음 n개의 행 각각은 학생 i의 등급인 단일 정수 si(1 ≤ si ≤ 10^6)가 입력된다.
출력
David가 모든 팀의 총 등급이 X 이상인 팀을 구성할 수 있도록 최대 값 X를 한 줄에 인쇄합니다.
분석
- 학생들이 받을 수 있는 점수들이 주어짐.
- 두 명이 한 팀을 이룰 때, 팀의 점수는 두 학생의 점수 합이 됨.
- 모든 팀의 점수가 X이상을 만족하는 최댓값 X는?
입력조건
학생의 수 N
N줄에 걸쳐 {
각 학생이 얻는 점수 a
}
풀이과정
- 입력을 전부 정렬한 뒤,
- 0번이랑 n-1꺼를 더하고,
- 1번이랑 n-2를 더하고 하는 식으로 진행해서,
- 더해진 점수들의 최솟값 출력.
전체 코드
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int num;
cin >> num;
int arr[num];
for(int i = 0; i < num; i++){
cin >> arr[i];
}
sort(arr, arr + num);
int hn = num/2;
int minnum = arr[0] + arr[num-1];
for(int i = 1; i <hn; i++)
minnum = min(arr[i] + arr[num-1-i], minnum);
cout << minnum;
}