๐Ÿ•๏ธ ICPC Sinchon/Basic Math

[BOJ][C++] ๋ฐฑ์ค€ 2108๋ฒˆ: ํ†ต๊ณ„ํ•™

์„ ๋‹ฌ 2023. 5. 30. 23:49
๋ฐ˜์‘ํ˜•

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

 

2108๋ฒˆ: ํ†ต๊ณ„ํ•™

์ฒซ์งธ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 500,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹จ, N์€ ํ™€์ˆ˜์ด๋‹ค. ๊ทธ ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ์ •์ˆ˜๋“ค์ด ์ฃผ์–ด์ง„๋‹ค. ์ž…๋ ฅ๋˜๋Š” ์ •์ˆ˜์˜ ์ ˆ๋Œ“๊ฐ’์€ 4,000์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค.

www.acmicpc.net

 

๋ฌธ์ œ

์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ํ†ต๊ณ„ํ•™์—์„œ ์ƒ๋‹นํžˆ ์ค‘์š”ํ•œ ์ผ์ด๋‹ค. ํ†ต๊ณ„ํ•™์—์„œ N๊ฐœ์˜ ์ˆ˜๋ฅผ ๋Œ€ํ‘œํ•˜๋Š” ๊ธฐ๋ณธ ํ†ต๊ณ„๊ฐ’์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์žˆ๋‹ค. ๋‹จ, N์€ ํ™€์ˆ˜๋ผ๊ณ  ๊ฐ€์ •ํ•˜์ž.

  1. ์‚ฐ์ˆ ํ‰๊ท  : N๊ฐœ์˜ ์ˆ˜๋“ค์˜ ํ•ฉ์„ N์œผ๋กœ ๋‚˜๋ˆˆ ๊ฐ’
  2. ์ค‘์•™๊ฐ’ : N๊ฐœ์˜ ์ˆ˜๋“ค์„ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋กœ ๋‚˜์—ดํ–ˆ์„ ๊ฒฝ์šฐ ๊ทธ ์ค‘์•™์— ์œ„์น˜ํ•˜๋Š” ๊ฐ’
  3. ์ตœ๋นˆ๊ฐ’ : N๊ฐœ์˜ ์ˆ˜๋“ค ์ค‘ ๊ฐ€์žฅ ๋งŽ์ด ๋‚˜ํƒ€๋‚˜๋Š” ๊ฐ’
  4. ๋ฒ”์œ„ : N๊ฐœ์˜ ์ˆ˜๋“ค ์ค‘ ์ตœ๋Œ“๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’์˜ ์ฐจ์ด

N๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋„ค ๊ฐ€์ง€ ๊ธฐ๋ณธ ํ†ต๊ณ„๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 500,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹จ, N์€ ํ™€์ˆ˜์ด๋‹ค. ๊ทธ ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ์ •์ˆ˜๋“ค์ด ์ฃผ์–ด์ง„๋‹ค. ์ž…๋ ฅ๋˜๋Š” ์ •์ˆ˜์˜ ์ ˆ๋Œ“๊ฐ’์€ 4,000์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ์‚ฐ์ˆ ํ‰๊ท ์„ ์ถœ๋ ฅํ•œ๋‹ค. ์†Œ์ˆ˜์  ์ดํ•˜ ์ฒซ์งธ ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผํ•œ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

๋‘˜์งธ ์ค„์—๋Š” ์ค‘์•™๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

์…‹์งธ ์ค„์—๋Š” ์ตœ๋นˆ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์„ ๋•Œ์—๋Š” ์ตœ๋นˆ๊ฐ’ ์ค‘ ๋‘ ๋ฒˆ์งธ๋กœ ์ž‘์€ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

๋„ท์งธ ์ค„์—๋Š” ๋ฒ”์œ„๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

์‚ฐ์ˆ ํ‰๊ท ์˜ ๊ฒฝ์šฐ ์˜ˆ์ œ4์— ๋‚˜์˜จ๋Œ€๋กœ -0๋งŒ ์ฃผ์˜ํ•˜๋ฉด ๋œ๋‹ค.

 

๊ทธ ์™ธ ๋‹ค๋ฅธ๋ถ€๋ถ„์€ ๋ฌด๋‚œํ–ˆ์ง€๋งŒ ์ตœ๋นˆ๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋กœ์ง์ด ๊ท€์ฐฎ์•˜๋‹ค.

๋‚˜์˜ ๊ฒฝ์šฐ, ๋นˆ๋„์ˆ˜๋ฅผ ๋‹ด๋Š” ๋ฒกํ„ฐ(๋ฐฐ์—ด) f๋ฅผ ๋งŒ๋“ค๊ณ 

(์ด๋•Œ, ์Œ์ˆ˜๋„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฒ”์œ„๋Š” 8000์œผ๋กœ ํ•˜๊ณ  ์ธ๋ฑ์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ 4000์”ฉ ๋”ํ•ด์ฃผ์—ˆ๋‹ค -> ๋ฒ”์œ„ -4000~4000 => 0~8000)

๊ทธ๋ฆฌ๊ณ  max_element๋ฅผ ์ด์šฉํ•˜์—ฌ ์ตœ๋นˆ๊ฐ’์˜ ์ธ๋ฑ์Šค ffi์™€ ์ตœ๋นˆ๊ฐ’์„ ๊ตฌํ•œ๋‹ค ff

์ด์ œ ff๋ฅผ ์ œ์™ธํ•œ ์ตœ๋นˆ๊ฐ’์„ ๊ตฌํ•œ๋‹ค (f[ffi]=0์œผ๋กœ ํ•ด์ค€ ๋’ค ๋‹ค์‹œ max_element๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค)

๋‘๋ฒˆ์จฐ ์ตœ๋นˆ๊ฐ’ fff์™€ ๊ทธ์˜ ์ธ๋ฑ์Šค fffi๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค

์ด์ œ ff์™€ fff๋ฅผ ๋น„๊ตํ•˜์—ฌ ๊ฐ™๋‹ค๋ฉด fffi๋ฅผ, ์•„๋‹ˆ๋ผ๋ฉด ffi๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•˜๋ฉด ๋

#include <iostream>
#include <algorithm>
#include <cmath>

using namespace std;

int main() {
    int n, input;
    cin >> n;
    vector<int> v;
    
    vector<int> f(8001, 0);
    double sum = 0;
    for(int i=0; i<n; i++) {
        cin >> input;
        v.push_back(input);
        f[input+4000]++;
        sum += input;
    }
    
    sort(v.begin(), v.end());
    
    // ์‚ฐ์ˆ ํ‰๊ท 
    int avg = round(sum/n);
    avg = avg == -0 ? 0 : avg;
    
    // ์ตœ๋นˆ๊ฐ’
    int ffi = max_element(f.begin(), f.end()) - f.begin();
    int ff = f[ffi];
    f[ffi] = 0;
    int fffi = max_element(f.begin(), f.end()) - f.begin();
    int fff = f[fffi];
    int frequent = ff == fff ? fffi : ffi;
    
    cout << avg << "\n" << v[n/2]  << "\n" << frequent - 4000 << "\n" << v[n-1]-v[0];
    
    return 0;
}
๋ฐ˜์‘ํ˜•