• toc {:toc}

문제 ν™•μΈν•˜κΈ°

풀이

아무리 봐도 전체적인 λ‘œμ§μ€ λ§žλŠ”λ° 계속 ν‹€λ €μ„œ μ™œ κ·ΈλŸ°κ°€ ν•˜κ³  λ΄€λ”λ‹ˆ 바보같이 λ°°μ—΄μ˜ μ‹œμž‘μ„ 1 둜 두고 sort λŠ” 0 λΆ€ν„° μ‹œμž‘ν–ˆλ‹€. λ‹€μ‹œ 0 으둜 전체λ₯Ό λ§žμΆ°μ€¬λ”λ‹ˆ ν†΅κ³Όν–ˆλ‹€.

가격이 μž‘μ€ μ„ λ¬ΌλΆ€ν„° λ„£κΈ° μ‹œμž‘ν•œλ‹€. λ¨Όμ € 할인할 수 μžˆλŠ” 개수만큼 ν• μΈν•˜λ©΄μ„œ 총합을 μ˜ˆμ‚°κ³Ό λΉ„κ΅ν•œλ‹€. 할인할 수 μžˆλŠ” κ°œμˆ˜κ°€ λλ‚˜λ„ μ˜ˆμ‚°μ΄ μ΄ˆκ³Όν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ 더 μ‚΄ 수 μžˆλŠ” κ°€λŠ₯성이 있기 λ•Œλ¬Έμ— 이전에 λ°˜κ°’ 할인 ν–ˆλ˜ 선물을 제 값을 μ£Όκ³  μ‚΄ 수 μžˆλ„λ‘ λ°˜κ°’μ„ λ‹€μ‹œ 더해주고, 아직 사지 μ•Šμ€ μ„ λ¬Ό 쀑 κ°€μž₯ μ‹Ό 선물을 ν• μΈν•΄μ„œ λ”ν•˜κ³  μ˜ˆμ‚°κ³Ό λΉ„κ΅ν•œλ‹€.

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
 
double price[100005];
 
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
 
    long long n, b, a;
    double sum = 0, res = 0;
 
    cin >> n >> b >> a;
 
    for(int i = 0; i < n; i++){
        cin >> price[i];
    }
 
    sort(price, price+n);
 
    for(int i = 0; i < a; i++){
        sum += price[i]/2;
        if(sum > b){
            cout << res << endl;
            exit(0);
        }
        res++;
        if(i == n-1) {
            break;
        }
    }
 
    for(int i = a; i < n; i++){
        sum += price[i-a] / 2;
        sum += price[i] / 2;
        if(sum > b){
            break;
        }
        res++;
    }
 
    cout << res << endl;
 
    return 0;
}