문제접근
•
모든 호반우를 한번에 묶는다고 가정했을때, 중앙값을 구하게 되면 중앙값보다 좋은 품질의 호반우는 절대 중앙값으로 정해질 수 없음. 모든 호반우를 묶었을때의 중앙값보다 큰 품질들을 중앙값으로 만들게 2개씩 묶어주면 됨
•
짝수일때, 전체 묶음의 중앙값을 찾고 그 녀석과 그것보다 작은 하나, 그리고 중앙값보다 품질들과 나머지 호반우들을 2개당 1묶음으로 묶으면 됨
•
홀수일때, 전페 묶음의 중앙값을 찾고 그 녀석을 혼자 묶고, 나머지는 중앙값보다 (큰 녀석, 작은 녀석) 이렇게 2개당 1묶음으로 묶으면 됨
놓쳤던 부분
코드
2416 KB
12 ms
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(void) {
	int n;
	vector<int> ho;
	int answer = 0;
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> n;
	ho.resize(n);
	for (int i = 0; i < n; i++)
		cin >> ho[i];
	sort(ho.begin(), ho.end());
	if (n % 2 == 0) {
		answer = ho[n / 2] * 2;
		for (int i = n / 2 + 1; i < n; i++)
			answer += ho[i] * 2;
	}
	else {
		answer = ho[(n + 1) / 2 - 1];
		for (int i = (n + 1) / 2; i < n; i++)
			answer += ho[i] * 2;
	}
	cout << answer;
	return (0);
}
C++
복사



