๐Ÿ•๏ธ ICPC Sinchon/Greedy

[BOJ][C++] ๋ฐฑ์ค€ 16206๋ฒˆ: ๋กค์ผ€์ดํฌ

์„ ๋‹ฌ 2023. 4. 12. 23:47
๋ฐ˜์‘ํ˜•

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

 

16206๋ฒˆ: ๋กค์ผ€์ดํฌ

์˜ค๋Š˜์€ ์žฌํ˜„์ด์˜ ์ƒ์ผ์ด๋‹ค. ์žฌํ˜„์ด๋Š” ์นœ๊ตฌ N๋ช…์—๊ฒŒ ๋กค์ผ€์ดํฌ๋ฅผ 1๊ฐœ์”ฉ ์„ ๋ฌผ๋กœ ๋ฐ›์•˜๋‹ค. ๋กค์ผ€์ดํฌ์˜ ๊ธธ์ด๋Š” A1, A2, ..., AN์ด๋‹ค. ์žฌํ˜„์ด๋Š” ๊ธธ์ด๊ฐ€ 10์ธ ๋กค์ผ€์ดํฌ๋งŒ ๋จน๋Š”๋‹ค. ๋”ฐ๋ผ์„œ, ๋กค์ผ€์ดํฌ๋ฅผ ์ž˜๋ผ์„œ

www.acmicpc.net

 

๋ฌธ์ œ

์˜ค๋Š˜์€ ์žฌํ˜„์ด์˜ ์ƒ์ผ์ด๋‹ค. ์žฌํ˜„์ด๋Š” ์นœ๊ตฌ N๋ช…์—๊ฒŒ ๋กค์ผ€์ดํฌ๋ฅผ 1๊ฐœ์”ฉ ์„ ๋ฌผ๋กœ ๋ฐ›์•˜๋‹ค. ๋กค์ผ€์ดํฌ์˜ ๊ธธ์ด๋Š” A1, A2, ..., AN์ด๋‹ค. ์žฌํ˜„์ด๋Š” ๊ธธ์ด๊ฐ€ 10์ธ ๋กค์ผ€์ดํฌ๋งŒ ๋จน๋Š”๋‹ค. ๋”ฐ๋ผ์„œ, ๋กค์ผ€์ดํฌ๋ฅผ ์ž˜๋ผ์„œ ๊ธธ์ด๊ฐ€ 10์ธ ๋กค์ผ€์ดํฌ๋ฅผ ์ตœ๋Œ€ํ•œ ๋งŽ์ด ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค.

๋กค์ผ€์ดํฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ํ†ตํ•ด์„œ ์ž๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

  1. ์ž๋ฅผ ๋กค์ผ€์ดํฌ๋ฅผ ํ•˜๋‚˜ ๊ณ ๋ฅธ๋‹ค. ๊ธธ์ด๊ฐ€ 1๋ณด๋‹ค ํฐ ๋กค์ผ€์ดํฌ๋งŒ ์ž๋ฅผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ, ๊ณ ๋ฅธ ๋กค์ผ€์ดํฌ์˜ ๊ธธ์ด๋ฅผ x๋ผ๊ณ  ํ•œ๋‹ค.
  2. 0๋ณด๋‹ค ํฌ๊ณ , x๋ณด๋‹ค ์ž‘์€ ์ž์—ฐ์ˆ˜ y๋ฅผ ๊ณ ๋ฅธ๋‹ค.
  3. ๋กค์ผ€์ดํฌ๋ฅผ ์ž˜๋ผ ๊ธธ์ด๊ฐ€ y, x-y์ธ ๋กค์ผ€์ดํฌ ๋‘ ๊ฐœ๋กœ ๋งŒ๋“ ๋‹ค.

์žฌํ˜„์ด๋Š” ๋กค์ผ€์ดํฌ๋ฅผ ์ตœ๋Œ€ M๋ฒˆ ์ž๋ฅผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ, ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ธธ์ด๊ฐ€ 10์ธ ๋กค์ผ€์ดํฌ ๊ฐœ์ˆ˜์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋กค์ผ€์ดํฌ์˜ ๊ฐœ์ˆ˜ N๊ณผ ์ž๋ฅผ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ํšŸ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N, M ≤ 1,000)

๋‘˜์งธ ์ค„์— ๋กค์ผ€์ดํฌ์˜ ๊ธธ์ด A1, A2, ..., AN์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ Ai ≤ 1,000)

์ถœ๋ ฅ

์žฌํ˜„์ด๊ฐ€ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ธธ์ด๊ฐ€ 10์ธ ๋กค์ผ€์ดํฌ ๊ฐœ์ˆ˜์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

๊ทธ๋ฆฌ๋””.

10์˜ ๋ฐฐ์ˆ˜๊ฐ€ ๋˜๋Š” ์ผ€์žŒ๋“ค์€ m๋ฒˆ ์ž๋ฅด๋ฉด m+1 ์กฐ๊ฐ์ด ๋‚˜์˜ค๋ฏ€๋กœ ์šฐ์„ ์ ์œผ๋กœ ์ž๋ฅธ๋‹ค

์ดํ›„ ๊ทธ ์™ธ ์ผ€์žŒ๋“ค์€ ํฐ ์ผ€์žŒ๋ถ€ํ„ฐ ์ž๋ฅธ๋‹ค.

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    // ์ž…๋ ฅ
    int n, m;
    cin >> n >> m;
    vector<int> v1;
    vector<int> v2;
    int x;
    for(int i=0; i<n; i++) {
        cin >> x;
        if(x%10 == 0)
            v1.push_back(x);
        else
            v2.push_back(x);
    }
    sort(v1.begin(), v1.end());
    sort(v2.begin(), v2.end(), greater<>());
    
    // ์ž๋ฅด๊ธฐ
    int ans=0;
    for(int i=0; i<v1.size(); i++) {
        int tmp = v1[i]/10;
        if(tmp-1 <= m) {
            ans += tmp;
            m -= tmp-1;
        } else {
            ans += m;
            m = 0;
        }
    }
    for(int i=0; i<v2.size() && m>0; i++) {
        int tmp = v2[i]/10;
        if(tmp <= m) {
            ans += tmp;
            m -= tmp;
        } else {
            ans += m;
            m = 0;
        }
    }
    
    // ์ถœ๋ ฅ
    cout << ans;
    
    return 0;
}
๋ฐ˜์‘ํ˜•