πŸ•οΈ ICPC Sinchon/Greedy

[BOJ][C++] λ°±μ€€ 20115번: μ—λ„ˆμ§€ λ“œλ§ν¬ (Silver III)

선달 2025. 3. 12. 03:22
λ°˜μ‘ν˜•

문제

νŽ˜μΈμ€ μ—λ„ˆμ§€ λ“œλ§ν¬λ₯Ό μ’‹μ•„ν•˜λŠ” νšŒμ‚¬μ›μ΄λ‹€. μ—λ„ˆμ§€ λ“œλ§ν¬λŠ” 카페인, μ•„λ₯΄κΈ°λ‹Œ, νƒ€μš°λ¦°, λ‚˜μ΄μ•„μ‹  λ“±μ˜ 성뢄이 λ“€μ–΄μžˆμ–΄ ν”Όλ‘œ νšŒλ³΅μ— 도움을 μ£ΌλŠ” μ—λ„ˆμ§€ 보좩 μŒλ£Œμˆ˜μ΄λ‹€.
야근을 마치고 ν•œλ°€μ€‘μ— ν‡΄κ·Όν•˜λ‹ˆ 벌써 μƒˆλ²½ 1μ‹œ. ν•˜μ§€λ§Œ 주말은 아직 λ©€μ—ˆκ³ , λ‹€μŒ 날에도 μ •μ‹œμ— μΆœκ·Όν•΄μ•Ό ν•˜λŠ” νŽ˜μΈμ€ μ˜€λŠ˜λ„ μ—λ„ˆμ§€ λ“œλ§ν¬λ₯Ό μ°ΎλŠ”λ‹€.
λ°˜λ³΅λ˜λŠ” 야근에 μ§€μΉœ λ‚˜λ¨Έμ§€, ν‰μ†Œλ³΄λ‹€ 더 λ§Žμ€ μ—λ„ˆμ§€μ™€ ν”Όλ‘œ 회볡이 ν•„μš”ν–ˆλ˜ νŽ˜μΈμ€ 집에 있던 μ—λ„ˆμ§€ λ“œλ§ν¬λ“€μ„ ν•œ 데 ν•©μ³μ„œ, ν•˜λ‚˜μ˜ μ—λ„ˆμ§€ λ“œλ§ν¬λ‘œ λ§Œλ“€μ–΄ ν•œλ²ˆμ— λ§ˆμ‹œλ € ν•œλ‹€.
페인이 μ—λ„ˆμ§€ λ“œλ§ν¬λ“€μ„ ν•©μΉ˜λŠ” 과정은 λ‹€μŒκ³Ό κ°™λ‹€.
예λ₯Ό λ“€μ–΄, 두 μ—λ„ˆμ§€ λ“œλ§ν¬a, bκ°€ 있고, 양이 각각xa, xb라 ν•  λ•Œ, λ‹€μŒ λ‘˜ 쀑 ν•˜λ‚˜μ˜ 선택을 ν•  수 μžˆλ‹€.
νŽ˜μΈμ€ 합쳐진 μ—λ„ˆμ§€ λ“œλ§ν¬μ˜ 양을 μ΅œλŒ€λ‘œ ν•˜λ € ν•œλ‹€. λΆˆμŒν•œ νŽ˜μΈμ„ λ„μ™€μ£Όμž!

μž…λ ₯

첫째 쀄에 페인이 가지고 μžˆλŠ” μ—λ„ˆμ§€ λ“œλ§ν¬μ˜ 수N이 주어진닀. (2 ≤N≤ 105)
λ‘˜μ§Έ 쀄에 각 μ—λ„ˆμ§€ λ“œλ§ν¬μ˜ 양이 곡백으둜 κ΅¬λΆ„λ˜μ–΄ 주어진닀.i번째 μ •μˆ˜xi(1 ≤xi≤ 109)λŠ” μ—λ„ˆμ§€ λ“œλ§ν¬i의 양이xiμž„μ„ μ˜λ―Έν•œλ‹€.

좜λ ₯

첫째 쀄에 페인이 μ΅œλŒ€λ‘œ λ§Œλ“€ 수 μžˆλŠ” μ—λ„ˆμ§€ λ“œλ§ν¬μ˜ 양을 좜λ ₯ν•œλ‹€.
μ ˆλŒ€/μƒλŒ€ μ˜€μ°¨λŠ” 10-5κΉŒμ§€ ν—ˆμš©ν•œλ‹€.

 

풀이

μ–΄λ–€ μˆœμ„œλ‘œ λ“œλ§ν¬λ₯Ό λ‹΄λŠ”μ§€λŠ” 사싀 큰 상관이 μ—†λ‹€.

κ²°κ΅­ ν•œκ°œλ₯Ό μ œμ™Έν•œ λͺ¨λ“  λ“œλ§ν¬λŠ” μ΅œμ’… λ“œλ§ν¬μ— 절반만큼 λ“€μ–΄κ°ˆ μˆ˜λ°–μ— μ—†λ‹€

(ν•˜λ‚˜λ‘œ 합쳐지기 μœ„ν•΄ μ΅œμ†Œ ν•œλ²ˆμ€ μ΄λ™ν•΄μ•Όν•˜λ―€λ‘œ)

 

λ”°λΌμ„œ 제일 큰 μ–‘ ν•˜λ‚˜μ— λ‚˜λ¨Έμ§€ λ“œλ§ν¬μ˜ μ ˆλ°˜μ„ λ”ν•˜λ©΄ 끝

// 풀이 : https://whkakrkr.tistory.com

#include <bits/stdc++.h>

using namespace std;

double solution(int &n, vector<float>&x) {
    double ans = 0;
    
    sort(x.begin(), x.end(), greater<>());
    
    ans += x[0];
    for(int i=1; i<n; i++) {
        ans += x[i]/2;
    }
    
    return ans;
}

int main() {
    ios_base::sync_with_stdio(false);
	cout.tie(NULL);
	cin.tie(NULL);
	
	int n;
	cin >> n;
	vector<float>v(n);
	for(int i=0; i<n; i++) {
	    cin >> v[i];
	}
	
	cout << solution(n, v);
	
    return 0;
}
λ°˜μ‘ν˜•