πŸ•οΈ ICPC Sinchon/Sorting

[BOJ S4][C++] λ°±μ€€ 1758번 : μ•Œλ°”μƒ κ°•ν˜Έ

선달 2022. 9. 6. 02:49
λ°˜μ‘ν˜•

μŠ€νƒ€λ°•μŠ€λŠ” μ†λ‹˜μ„ μž…μž₯μ‹œν‚¬ λ•Œ λ…νŠΉν•œ λ°©λ²•μœΌλ‘œ μž…μž₯μ‹œν‚¨λ‹€.

μŠ€νƒ€λ°•μŠ€μ—μ„œλŠ” μ†λ‹˜μ„ 8μ‹œκ°€ 될 λ•Œ κΉŒμ§€, λ¬Έμ•žμ— 쀄 μ„Έμ›Œ λ†“λŠ”λ‹€. 그리고 8μ‹œκ°€ λ˜λŠ” μˆœκ°„ μ†λ‹˜λ“€μ€ λͺ¨λ‘ μž…κ΅¬μ—μ„œ 컀피λ₯Ό ν•˜λ‚˜μ”© λ°›κ³ , 자리둜 κ°„λ‹€. κ°•ν˜ΈλŠ” μž…κ΅¬μ—μ„œ 컀피λ₯Ό ν•˜λ‚˜μ”© μ£ΌλŠ” 역할을 ν•œλ‹€.

μ†λ‹˜λ“€μ€ μž…κ΅¬μ— λ“€μ–΄κ°ˆ λ•Œ, κ°•ν˜Έμ—κ²Œ νŒμ„ μ€€λ‹€. μ†λ‹˜λ“€μ€ μžκΈ°κ°€ 컀피λ₯Ό λͺ‡ 번째 λ°›λŠ”지에 따라 νŒμ„ λ‹€λ₯Έ μ•‘μˆ˜λ‘œ κ°•ν˜Έμ—κ²Œ μ€€λ‹€. 각 μ†λ‹˜μ€ κ°•ν˜Έμ—κ²Œ μ›λž˜ μ£Όλ €κ³  μƒκ°ν–ˆλ˜ 돈 - (받은 λ“±μˆ˜ - 1) 만큼의 νŒμ„ κ°•ν˜Έμ—κ²Œ μ€€λ‹€. λ§Œμ•½, μœ„μ˜ μ‹μœΌλ‘œ λ‚˜μ˜¨ 값이 음수라면, κ°•ν˜ΈλŠ” νŒμ„ 받을 수 μ—†λ‹€.

예λ₯Ό λ“€μ–΄, λ―Όν˜ΈλŠ” νŒμ„ 3원 μ£Όλ €κ³  ν–ˆκ³ , μž¬ν•„μ΄λŠ” νŒμ„ 2원, μ£Όν˜„μ΄κ°€ νŒμ„ 1원 μ£Όλ €κ³  ν•œ 경우λ₯Ό μƒκ°ν•΄λ³΄μž.

민호, μž¬ν•„, μ£Όν˜„μ΄ μˆœμ„œλŒ€λ‘œ 쀄을 μ„œμžˆλ‹€λ©΄, λ―Όν˜ΈλŠ” κ°•ν˜Έμ—κ²Œ 3-(1-1) = 3원, μž¬ν•„μ΄λŠ” 2-(2-1) = 1원, μ£Όν˜„μ΄λŠ” 1-(3-1) = -1원을 팁으둜 주게 λœλ‹€. μ£Όν˜„μ΄λŠ” 음수이기 λ•Œλ¬Έμ—, κ°•ν˜Έμ—κ²Œ νŒμ„ 주지 μ•ŠλŠ”λ‹€. λ”°λΌμ„œ, κ°•ν˜ΈλŠ” νŒμ„ 3+1+0=4원을 λ°›κ²Œ λœλ‹€.

μŠ€νƒ€λ°•μŠ€ μ•žμ— μžˆλŠ” μ‚¬λžŒμ˜ 수 Nκ³Ό, 각 μ‚¬λžŒμ΄ μ£Όλ €κ³  μƒκ°ν•˜λŠ” 팁이 μ£Όμ–΄μ§ˆ λ•Œ, μ†λ‹˜μ˜ μˆœμ„œλ₯Ό 적절히 바꿨을 λ•Œ, κ°•ν˜Έκ°€ λ°›μ„ 수 μž‡λŠ” 팁의 μ΅œλŒ“κ°’μ„ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

첫째 쀄에 μŠ€νƒ€λ°•μŠ€ μ•žμ— μ„œ μžˆλŠ” μ‚¬λžŒμ˜ 수 N이 주어진닀. N은 100,000보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜μ΄λ‹€. λ‘˜μ§Έ 쀄뢀터 총 N개의 쀄에 각 μ‚¬λžŒμ΄ μ£Όλ €κ³  ν•˜λŠ” 팁이 주어진닀. νŒμ€ 100,000보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜μ΄λ‹€.

좜λ ₯

κ°•ν˜Έκ°€ 받을 수 μžˆλŠ” 팁의 μ΅œλŒ“κ°’μ„ 좜λ ₯ν•œλ‹€.

 

풀이

 

6% μ—μ„œ ν‹€λ ΈμŠ΅λ‹ˆλ‹€κ°€ λœ¬λ‹€λ©΄..?

μ •μˆ˜ν˜•μ„ int 말고 long long int 둜 ν•΄λ³΄μž

 

// Authored by : seondal
// Co-authored by : -

// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

long long int cal_tip(int n, vector<long long int> v) {
    long long int tip = 0;
    for(int i=0; i<n; i++) {
        long long int tmp = v[i] - i;
        if(tmp>=0) tip += tmp;
    }
    return tip;
}

int main() {
    int n;
    cin >> n;
    
    vector<long long int> v(n);
    for(int i=0; i<n; i++) cin >> v[i];
    
    sort(v.begin(), v.end(), greater<>());
    
    cout << cal_tip(n, v);
    
    return 0;
}

/*
 */
λ°˜μ‘ν˜•