알고리즘 공부

백준 서강근육맨

컴퓨터과학 2023. 7. 18. 22:47

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

 

20300번: 서강근육맨

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

www.acmicpc.net

합 사이즈 잘볼것 int형으로 계산해서 계속 잘못됫다고 떳네요..

long형으로 받아서 합친값을 해결해줘야합니다.

/**/
#include <iostream>
#include <vector>
#include <queue>
#include<string>
#include<algorithm>
#include<cmath>
#include<unordered_map>
#include<map>
using namespace std;


int main() {
	int n;
	cin >> n;
	vector<long>v;
	for (int i = 0; i < n; i++) {
		long tmp;
		cin >> tmp;
		v.push_back(tmp);
	}
	sort(v.begin(), v.end(),greater<>());
	long max = 0;
	if (v.size() % 2 == 0) {
		for (int i = 0; i < n/2 ; i++) {
			long sum = v[i] + v[n-1-i];
			
			if (max <sum) {
				max = sum;
			}
		}
	}
	else {
		
		long mMx = 0;
		for (int i = 0; i < n/2; i++) {
			if (i != n - 1 - i) {
				long sum = v[i] + v[n - 1 - i];
				//cout << sum << ",";
				if (mMx < sum) {
					mMx = sum;
				}
			}
			
		}
		long nMx = 0;
		for (int i = 0; i < n/2; i++) {
			long sum = v[i+1] + v[n - 1 - i];
			//cout << sum << ",";
			if (nMx < sum) {
				nMx = sum;
			}
		}
		if (mMx > nMx) {
			max = nMx;
		}
		else {
			max = mMx;
		}
	}
	cout << max;
	
	return 0;
}