λ¬Έμ
μλ₯Ό μ²λ¦¬νλ κ²μ ν΅κ³νμμ μλΉν μ€μν μΌμ΄λ€. ν΅κ³νμμ Nκ°μ μλ₯Ό λννλ κΈ°λ³Έ ν΅κ³κ°μλ λ€μκ³Ό κ°μ κ²λ€μ΄ μλ€. λ¨, Nμ νμλΌκ³ κ°μ νμ.
- μ°μ νκ· : Nκ°μ μλ€μ ν©μ NμΌλ‘ λλ κ°
- μ€μκ° : Nκ°μ μλ€μ μ¦κ°νλ μμλ‘ λμ΄νμ κ²½μ° κ·Έ μ€μμ μμΉνλ κ°
- μ΅λΉκ° : Nκ°μ μλ€ μ€ κ°μ₯ λ§μ΄ λνλλ κ°
- λ²μ : Nκ°μ μλ€ μ€ μ΅λκ°κ³Ό μ΅μκ°μ μ°¨μ΄
Nκ°μ μκ° μ£Όμ΄μ‘μ λ, λ€ κ°μ§ κΈ°λ³Έ ν΅κ³κ°μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ μμ κ°μ N(1 ≤ N ≤ 500,000)μ΄ μ£Όμ΄μ§λ€. λ¨, Nμ νμμ΄λ€. κ·Έ λ€μ Nκ°μ μ€μλ μ μλ€μ΄ μ£Όμ΄μ§λ€. μ λ ₯λλ μ μμ μ λκ°μ 4,000μ λμ§ μλλ€.
μΆλ ₯
첫째 μ€μλ μ°μ νκ· μ μΆλ ₯νλ€. μμμ μ΄ν 첫째 μ리μμ λ°μ¬λ¦Όν κ°μ μΆλ ₯νλ€.
λμ§Έ μ€μλ μ€μκ°μ μΆλ ₯νλ€.
μ μ§Έ μ€μλ μ΅λΉκ°μ μΆλ ₯νλ€. μ¬λ¬ κ° μμ λμλ μ΅λΉκ° μ€ λ λ²μ§Έλ‘ μμ κ°μ μΆλ ₯νλ€.
λ·μ§Έ μ€μλ λ²μλ₯Ό μΆλ ₯νλ€.
νμ΄
1. μ°μ νκ· : μ€μ μλ£ν μ¬μ©
2. μ€μκ° : nμ νμ -> νμ (n/2)λ²μ§Έ μΈλ±μ€
3. μ΅λΉκ°: κ°μ₯ λ§μ΄ λνλλ κ°μ΄λΌκ³ μκ°νλ©΄ μ λλ€. μ¬λ¬ κ° μμ κ²½μ°λ λμΌν λΉλμ λ΄μμ λ λ²μ§Έλ‘ μμ κ°μ μΆλ ₯νκΈ° λλ¬Έ!
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
typedef pair<int, int> ci;
bool cmp(const ci &a, const ci &b) {
// 1. κ°μμ λν΄ μ€λ¦μ°¨μ
// 2. κ°μ λν΄ λ΄λ¦Όμ°¨μ
if (a.second != b.second)
return a.second > b.second;
return a.first < b.first;
}
int findMode(int n, vector<int> &num) {
vector<ci> count; // first : κ°, second : κ°μ
int cur_idx = 0;
count.push_back({num[0], 1}); // μΈλ±μ€ μλ¬ λ°©μ§μ©
// μ΄λ―Έ μ λ ¬λ 벑ν°μμ μ μμ κ°μλ₯Ό count -> μ°μλλ κ°μ count
for (int i = 1; i < n; i++) {
if (num[i] == num[i - 1]) // μ°μμΈ κ²½μ°
count[cur_idx].second++;
else {
count.push_back({num[i], 1}); // μλ‘μ΄ κ° μ½μ
cur_idx++;
}
}
// λͺ¨λ 1κ°μ© λ€μ΄μλ κ²½μ°
if (cur_idx == 0)
return num[0];
// μ΅λΉκ° κ³μ°
sort(count.begin(), count.end(), cmp);
// μ¬λ¬ κ°μΈ κ²½μ°
if (count[0].second == count[1].second)
return count[1].first;
return count[0].first;
}
int main() {
int n;
int sum = 0;
cin >> n;
vector<int> num(n);
for (int i = 0; i < n; i++) {
cin >> num[i];
sum += num[i];
}
sort(num.begin(), num.end());
if (round((double)sum / n) == -0)
cout << "0\n";
else
cout << round((double)sum / n) << '\n';
cout << num[n / 2] << "\n"; // μ€μκ°
cout << findMode(n, num) << "\n"; // μ΅λΉκ°
cout << num[n - 1] - num[0] << "\n"; // λ²μ
}
'β¨ Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€/C++] 11866λ²: μμΈνΈμ€ λ¬Έμ 0 (0) | 2022.07.31 |
---|---|
[λ°±μ€/C++] 18115λ²: μΉ΄λ λκΈ° (0) | 2022.07.24 |
[λ°±μ€/C++] 1213λ²: ν°λ¦°λ둬 λ§λ€κΈ° (0) | 2022.07.24 |
[λ°±μ€/C++] 20920λ²: μλ¨μ΄ μκΈ°λ κ΄΄λ‘μ (0) | 2022.07.17 |
[λ°±μ€/C++] 20291λ²: νμΌ μ 리 (0) | 2022.07.17 |
λκΈ