π λ°±μ€ 2108 ν΅κ³ν https://www.acmicpc.net/problem/2108
λ¬Έμ
μλ₯Ό μ²λ¦¬νλ κ²μ ν΅κ³νμμ μλΉν μ€μν μΌμ΄λ€. ν΅κ³νμμ Nκ°μ μλ₯Ό λννλ κΈ°λ³Έ ν΅κ³κ°μλ λ€μκ³Ό κ°μ κ²λ€μ΄ μλ€. λ¨, Nμ νμλΌκ³ κ°μ νμ.
- μ°μ νκ· : Nκ°μ μλ€μ ν©μ NμΌλ‘ λλ κ°
- μ€μκ° : Nκ°μ μλ€μ μ¦κ°νλ μμλ‘ λμ΄νμ κ²½μ° κ·Έ μ€μμ μμΉνλ κ°
- μ΅λΉκ° : Nκ°μ μλ€ μ€ κ°μ₯ λ§μ΄ λνλλ κ°
- λ²μ : Nκ°μ μλ€ μ€ μ΅λκ°κ³Ό μ΅μκ°μ μ°¨μ΄
Nκ°μ μκ° μ£Όμ΄μ‘μ λ, λ€ κ°μ§ κΈ°λ³Έ ν΅κ³κ°μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ μμ κ°μ N(1 β€ N β€ 500,000)μ΄ μ£Όμ΄μ§λ€. λ¨, Nμ νμμ΄λ€. κ·Έ λ€μ Nκ°μ μ€μλ μ μλ€μ΄ μ£Όμ΄μ§λ€. μ λ ₯λλ μ μμ μ λκ°μ 4,000μ λμ§ μλλ€.
μΆλ ₯
첫째 μ€μλ μ°μ νκ· μ μΆλ ₯νλ€. μμμ μ΄ν 첫째 μ리μμ λ°μ¬λ¦Όν κ°μ μΆλ ₯νλ€.
λμ§Έ μ€μλ μ€μκ°μ μΆλ ₯νλ€.
μ μ§Έ μ€μλ μ΅λΉκ°μ μΆλ ₯νλ€. μ¬λ¬ κ° μμ λμλ μ΅λΉκ° μ€ λ λ²μ§Έλ‘ μμ κ°μ μΆλ ₯νλ€.
λ·μ§Έ μ€μλ λ²μλ₯Ό μΆλ ₯νλ€.
νμ΄
νκ· κ° : μ λ ₯λ°μ λͺ¨λ μλ₯Ό λνμ¬ λλ νκ· μ roundλ‘ μμμ μ λ°μ¬λ¦Όνμ¬ μΆλ ₯ μ€μκ° : μ λ ₯λ°μ μκ° λ€μ΄μλ λ°°μ΄μ μ λ ¬ν ν n/2μ μμΉν κ°μ μΆλ ₯ λ²μ : μ λ ¬ν λ°°μ΄μμ κ°μ₯ ν° μ - κ°μ₯ μμ μ λ₯Ό μΆλ ₯
μ¬κΈ°μ λ¬Έμ λ μ΅λΉκ°μ΄λ€. μ¬λ¬κ°κ° μλ€λ©΄ μ΅λΉκ° μ€ λ λ²μ§Έλ‘ μμ κ°μ μΆλ ₯ν΄μΌνλ€. μ¬κΈ°μ κ³ λ―Όνλ λμ μκ°μ μ‘°κΈ μ‘μλ¨Ήμλ€.
λ¨Όμ μ΅λΉκ°μ ꡬνκΈ° μν΄ μλ₯Ό μ λ ₯λ°μ λλ§λ€ κ·Έ μλ₯Ό indexλ‘ νμ¬ μΉ΄μ΄ν ν boolean λ°°μ΄μ μ μΈν΄μ£Όμλ€. κ·Έ νλ‘ μΉ΄μ΄ν μ λλΈ ν, boolean λ°°μ΄μμ κ°μ₯ ν° μλ₯Ό μ°Ύμ κ·Έ μΈλ±μ€λ₯Ό listμ μ μ₯νλ€.
λ§μ½ listμ κΈΈμ΄κ° 1λ³΄λ€ ν¬λ€λ©΄ 1λ² μΈλ±μ€μ μ μ₯ν μλ₯Ό, μλλΌλ©΄ 0λ²μ§Έ μλ₯Ό μΆλ ₯μμΌμ€λ€.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] arr = new int[n];
List<Integer> list = new ArrayList<>();
int[] check = new int[8001]; // μ λκ° 4000, μ¦ -4000 ~ 4000κΉμ§ μ΄ 8001κ°
int max = 0;
int sum = 0;
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(br.readLine());
sum += arr[i];
check[arr[i] + 4000]++;
}
System.out.println((int)Math.round((double)sum/n)); // νκ·
Arrays.sort(arr);
System.out.println(arr[n/2]); // μ€μκ°
for (int i = 0; i < 8001; i++) max = Math.max(max, check[i]);
for (int i = 0; i < 8001; i++) if(check[i] == max) list.add(i - 4000);
System.out.println(list.size() > 1 ? list.get(1) : list.get(0)); // μ΅λΉκ°
System.out.println(arr[arr.length-1] - arr[0]); // λ²μ
}
}