본문 바로가기

Algorithm/BAEKJOON

[BOJ] 20300번 서강근육맨 (C++)

728x90
반응형

https://www.acmicpc.net/problem/20300

 

20300번: 서강근육맨

PT 첫째 날에 $1$과 $4$를 선택하고, 둘째 날에 $2$와 $3$을 선택하고, 마지막 날에 $5$를 선택하면 $M$은 $5$가 되며, 이때가 $M$이 최소일 때이다.

www.acmicpc.net

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
	int n;
	long long t;
	cin >> n;
	
	vector<long long> v;
	for(int i = 0; i < n; i++){
		cin >> t;
		v.push_back(t);
	}
	
	sort(v.begin(), v.end());
	
	long long max = 0;
	if(n % 2 == 0){
		for(int i = 0; i < n / 2; i++){
			if(v[i] + v[n - i - 1] > max) max = v[i] + v[n - i - 1];
 		}
	} else{
		max = v[n - 1];
		for(int i = 0; i < (n - 1) / 2; i++){
			if(v[i] + v[n - i - 2] > max) max = v[i] + v[n - i - 2];
 		}
	}
	
	cout << max << endl;
	return 0;
}

 

먼저, 근손실 정도를 오름차순으로 정렬한다.

데이터의 개수가 짝수개이면 0번째 + n - 1번째, 1번째 + n - 2번째, ... 중에서 가장 큰 값을 찾으면 되고

데이터의 개수가 홀수개이면 가장 큰 값(n - 1번째), 0번째 + n - 2번째, 1번째 + n - 3번째, ... 중에서 가장 큰 값을 찾으면 된다.

728x90
반응형

'Algorithm > BAEKJOON' 카테고리의 다른 글

[BOJ] 2589번 보물섬 (C++)  (0) 2022.04.29
[BOJ] 2636번 치즈 (C++)  (0) 2022.04.29
[BOJ] 12813번 이진수 연산 (C++)  (0) 2022.03.07
[BOJ] 10974번 모든 순열 (C++)  (0) 2022.03.06
[BOJ] 11659번 구간 합 구하기 4 (C++)  (0) 2022.03.06