๐ ๋ฐฑ์ค 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]); // ๋ฒ์
}
}