λ¬Έμ
μλ₯Ό μ²λ¦¬νλ κ²μ ν΅κ³νμμ μλΉν μ€μν μΌμ΄λ€. ν΅κ³νμμ Nκ°μ μλ₯Ό λννλ κΈ°λ³Έ ν΅κ³κ°μλ λ€μκ³Ό κ°μ κ²λ€μ΄ μλ€. λ¨, Nμ νμλΌκ³ κ°μ νμ.
- μ°μ νκ· : Nκ°μ μλ€μ ν©μ NμΌλ‘ λλ κ°
- μ€μκ° : Nκ°μ μλ€μ μ¦κ°νλ μμλ‘ λμ΄νμ κ²½μ° κ·Έ μ€μμ μμΉνλ κ°
- μ΅λΉκ° : Nκ°μ μλ€ μ€ κ°μ₯ λ§μ΄ λνλλ κ°
- λ²μ : Nκ°μ μλ€ μ€ μ΅λκ°κ³Ό μ΅μκ°μ μ°¨μ΄
Nκ°μ μκ° μ£Όμ΄μ‘μ λ, λ€ κ°μ§ κΈ°λ³Έ ν΅κ³κ°μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ μμ κ°μ N(1 ≤ N ≤ 500,000)μ΄ μ£Όμ΄μ§λ€. κ·Έ λ€μ Nκ°μ μ€μλ μ μλ€μ΄ μ£Όμ΄μ§λ€. μ λ ₯λλ μ μμ μ λκ°μ 4,000μ λμ§ μλλ€.
μΆλ ₯
첫째 μ€μλ μ°μ νκ· μ μΆλ ₯νλ€. μμμ μ΄ν 첫째 μ리μμ λ°μ¬λ¦Όν κ°μ μΆλ ₯νλ€.
λμ§Έ μ€μλ μ€μκ°μ μΆλ ₯νλ€.
μ μ§Έ μ€μλ μ΅λΉκ°μ μΆλ ₯νλ€. μ¬λ¬ κ° μμ λμλ μ΅λΉκ° μ€ λ λ²μ§Έλ‘ μμ κ°μ μΆλ ₯νλ€.
λ·μ§Έ μ€μλ λ²μλ₯Ό μΆλ ₯νλ€.
μμ μ λ ₯ 1
5
1
3
8
-2
2
μμ μΆλ ₯ 1
2
2
1
10
μμ μ λ ₯ 2
1
4000
μμ μΆλ ₯ 2
4000
4000
4000
0
μμ μ λ ₯ 3
5
-1
-2
-3
-1
-2
μμ μΆλ ₯ 3
-2
-2
-1
2
νμ΄
μ°μ νκ· κ³Ό μ€μκ°, μ΅λΉκ°, λ²μλ₯Ό ꡬνλ λ¬Έμ
=> μΉ΄μ΄ν μ λ ¬ μκ³ λ¦¬μ¦ μ΄μ©
μ°μ νκ· μ μ λ ₯λ°μ κ°μ λͺ¨λ λν΄ κ°μλ‘ λλλ©΄ λκ³
μ€μκ°μ μ λ ¬ ν n/2 μ리μ κ°μ΄λ©°
λ²μλ μ λ ¬ ν λ§μ§λ§ κ° - 첫λ²μ§Έ κ°μ΄λ€.
μ΅λΉκ°μ΄ κ°μ₯ κΉλ€λ‘λ€. μ΅λΉκ°μ΄ μ¬λ¬κ° μΌ λ λ λ²μ§Έλ‘ μμ κ°μ μΆλ ₯ν΄μΌ νκΈ° λλ¬Έμ΄λ€.
1. nκ°μ μ μλ₯Ό μ λ ₯λ°λλ€.
1-1. μ΄λ μ λ ₯λ°μ λ°°μ΄μ μ μ₯ν¨κ³Ό λμμ total λ³μμ λν΄ μ΄ ν©μ ꡬν΄μ£Όκ³ ,
1-2. μ λ ₯λ°λ κ°μ λΉκ΅νμ¬ μ΅λκ°κ³Ό μ΅μκ°μ maxκ°κ³Ό mixκ°μ μ μ₯νλ€.
2. μ°μ νκ· κ³Ό λ²μλ₯Ό ꡬνλ€
2-1. μ λ ₯μ΄ λλλ©΄ totalμ nμΌλ‘ λλμ΄ μ°μ νκ· μ ꡬν΄μ€λ€.
μ£Όμν μ μ totalμ double νμΌλ‘ μ μΈν΄ μ£Όμ΄μΌ nμΌλ‘ λλλ κ³Όμ μμ μμμ μ΄ λ μκ°μ§ μλλ€.
μμμ 첫째μ리μμ λ°μ¬λ¦Ό ν΄μΌ νκΈ° λλ¬Έμ Math.round() λ©μλλ₯Ό μ¬μ©νλ€.
2-2. maxκ°κ³Ό minκ°μ μ΄μ©ν΄ λ²μλ₯Ό ꡬν΄μ€λ€. (max - min)
μΉ΄μ΄ν μ λ ¬μ μ΄μ©ν΄ μ΅λΉκ°μ ꡬν΄λ³΄κΈ°λ‘ νλ€.
κΈ°μ‘΄ μΉ΄μ΄ν μ λ ¬μ μμκ°λ§ μ λ ¬ν μ μμμ§λ§, μ΄λ₯Ό λ³ννμ¬ μμκ°λ μ λ ¬μ΄ κ°λ₯νλλ‘ ν΄ μ€λ€.
μμμ ꡬν min κ°μ λ°°μ΄μ 0, max κ°μ λ°°μ΄μ λ§μ§λ§ μμΉλΌκ³ κ°μ , λ²μ+1 ν¬κΈ°μ λ°°μ΄ countλ₯Ό λ§λ€μ΄ λΉλμλ₯Ό μ ν΄μ£Όλ λ°©μμ μ¬μ©ν κ²μ΄λ€.
μμ 1κ³Ό κ°μ΄ -2 ~ 8 κΉμ§μ μκ° μ£Όμ΄μ§λ€λ©΄ λ²μλ 10, ν¬κΈ° 11μΈ λ°°μ΄μ λ§λ€μ΄ μΉ΄μ΄ν ν΄μ€λ€.
3. 2-2μμ ꡬν λ²μλ₯Ό μ΄μ©ν΄ λ²μ+1 ν¬κΈ°μ count λ°°μ΄μ λ§λ€μ΄ λΉλμλ₯Ό μ μ₯νλ€.
λΉλμλ₯Ό μ λ, μΉ΄μ΄ν μ λ ¬κ³Ό κ°μ΄ ν΄λΉ μ«μμ κ°μ λ°°μ΄ μΈλ±μ€μ μ κ·Όν μλ μλ€. μ«μκ° μμμΌ μλ μκΈ° λλ¬Έμ΄λ€.
μμ 1μμλ -2λ λ°°μ΄[0]μ, 8μ λ°°μ΄[10]μ μ μ₯λ κ²μ΄λ€. [μ«μ - μ΅μκ°] μ΄ ν΄λΉ μ«μμ μΈλ±μ€κ° λ¨μ μ μ μλ€.
μ΄μ κ° μμ λΉλμλ₯Ό λ°°μ΄μ μ μ₯νμλ€.
4. count λ°°μ΄ μ€ κ°μ₯ ν° κ°μ΄ λμ§ μ°Ύλλ€. λλ²μ§Έλ‘ μμ μ«μμΈμ§ νμΈν num, μ΅λΉκ°μ μΈλ±μ€λ₯Ό μ μ₯ν mode_idx 4-1. μ΅λΉκ°μ μΈλ±μ€λ₯Ό λ³μ mode_idxμ μ μ₯ν ν forλ¬Έ μμμ count λ°°μ΄μ μννλ©° λΉκ΅νλ€. 4-2. if (count[mode_idx] == count[i])μΌ λ forλ¬Έμ νμΆν ν κ·Έ μΈλ±μ€λ₯Ό μΆλ ₯νλ©΄ λκ² λ€κ³ μκ°νλλ° νΉμ κ·Έ μ«μκ° μ΅λΉκ°μ΄ μλλ©΄ μ΄λ‘νμ§ νλ μκ°μ΄ λ€μλ€. κ·Έλμ 쑰건μ μΆκ°νλ€. if(count[mode_idx] == count[i] && num == 1)μΌ λ, mode_idx = i, num++μ ν΄μ€λ€. 4-3. if(count[mode_idx] < count[i] && count[mode_idx] != count[i])μΌ λ, mode_idx = i, num = 1μ ν΄μ€λ€.=> μΉ΄μ΄νΈ λ°°μ΄ κ°μ λΉκ΅νκ³ , κ°μ₯ ν° κ°μ μΈλ±μ€κ° mode_idx μ μ μ₯λλ€. κ°μ₯ ν° κ°μ΄ μ€λ³΅μΌλ‘ λμ¬ κ²½μ°, λλ²μ§Έ κ°λ§ μ μ₯νκΈ° μν΄μ numμ΄ 1μΌ λλ§ numμ μ¦κ°μμΌμ€λ€. λν λ°°μ΄ λ·λΆλΆμ λ ν° κ°μ΄ λμ¬ μ μμΌλ―λ‘ λ ν° κ°μ λ°κ²¬ν κ²½μ°μ num κ°μ 1λ‘ λ°κΏμ€λ€.forλ¬Έ μνμ΄ λλλ©΄ mode_idxμ μ΅λΉκ°μ΄ μ μ₯λμμ κ²μ΄λ€. μ΄λ₯Ό μ΄μ©ν΄ μ΅λΉκ°μ ꡬν΄μ€λ€. minκ°μ λν΄μ£Όμ΄μΌ νλ€.
5. count λ°°μ΄μ λΉλμλ₯Ό λμ ν΄μ λν΄μ£Όκ³ ,
6. μ λ ₯ λ°°μ΄μ μμμΌλ‘ λ°°μ΄bμ μμλ₯Ό μ±μλ£λλ€.
μ΄λ, λΉλμλ₯Ό μ λμ λ§μ°¬κ°μ§λ‘ ν΄λΉ μ«μ κ·Έλλ‘ λ°°μ΄ μΈλ±μ€μ μ κ·Όνλ©΄ μ€λ₯κ° λ μ μκΈ° λλ¬Έμ μ«μ - μ΅μκ° μΌλ‘ λ°°μ΄μ μ κ·Όν΄μΌλ§ νλ€.
7. λ°°μ΄ bλ₯Ό κΈ°μ‘΄ λ°°μ΄μ 볡μ¬νλ€.
8. μ λ ¬λ λ°°μ΄[n/2] μ μμΉν μ€μκ°μ μ μ₯
9. μ°μ νκ· κ³Ό μ€μκ°, μ΅λΉκ°, λ²μλ₯Ό μ°¨λ‘λ‘ μΆλ ₯νλ€.
import java.io.*;
public class B2108 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] sort = new int[n];
double total = 0;
for(int i = 0; i < n; i++) {
sort[i] = Integer.parseInt(br.readLine());
total += sort[i];
}
int max = sort[0];
int min = sort[0];
for(int i = 0; i < n; i++) {
if(sort[i] > max)
max = sort[i];
if(sort[i] < min)
min = sort[i];
}
int i1 = (int)Math.round(total / n); // μ°μ νκ·
int i2 = 0; // μ€μκ°
int i3 = 0; // μ΅λΉκ°
int i4 = max - min;; // λ²μ
int[] count = new int[i4+1];
int[] b = new int[n];
for(int i = 0; i < sort.length; i++) {
count[sort[i] - min]++;
}
int mode = -1;
int num = 1;
int mode_idx = 0;
for(int i = 0; i < count.length; i++) {
if(mode == count[i] && num == 1) {
mode_idx = i;
num++;
}
if(mode < count[i] && mode != count[i]) {
mode = count[i];
mode_idx = i;
num = 1;
}
}
i3 = mode_idx+min;
for(int i = 1; i < i4+1; i++) count[i] += count[i-1];
for(int i = n-1; i >= 0; i--) b[--count[sort[i] - min]] = sort[i];
for(int i = 0; i < n; i++) sort[i] = b[i];
i2 = sort[n/2];
System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
System.out.println(i4);
}
}